2011-08-20 4 views
0

Codeigniter를 사용하고 jQuery 자동 완성을 사용하려고합니다. 또한 Netflix에서 자동 완성 데이터를 받기 때문에 @Phil Sturgeon 클라이언트 라이브러리를 Codeigniter에 사용하고 있습니다. 나는 올바른 JSON을 반환와 나는JSON이 객체가 아닌 개별 문자열로 반환되었습니다.

response(data.autocomplete.autocomplete_item[0].title.short); 

와 함께 첫 번째 요소에 액세스 할 수 있지만 때 결과

for (var i in data.autocomplete.autocomplete_item) { 
response(data.autocomplete.autocomplete_item[i].title.short) 
} 

이 문자열 같은 역할을 통해 I 루프. 결과는 "스윙 어"라고하자,이 반환합니다
Object.value =의
Object.value =
Object.value W = 내가

등등.

JS :

$("#movies").autocomplete({ 
      source: function(request, response) { 
      $.ajax({ 
      url: "<?php echo site_url();?>/welcome/search", 
      dataType: "JSON", 
      type:"POST", 
      data: { 
       q: request.term 
      }, 
      success: function(data) { 
       for (var i in data.autocomplete.autocomplete_item) { 
       response(data.autocomplete.autocomplete_item[i].title.short); 
       } 

      } 
      }); 
     }   
     }).data("autocomplete")._renderItem = function(ul, item) { 
      //console.log(item); 
     $(ul).attr('id', 'search-autocomplete'); 
      return $("<li class=\""+item.type+"\"></li>").data("item.autocomplete", item).append("<a href=\""+item.url+"\">"+item.title+"</a>").appendTo(ul); 
     }; 

컨트롤러 :

public function search(){ 
    $search = $this->input->post('q'); 
    // Run some setup 
    $this->rest->initialize(array('server' => 'http://api.netflix.com/')); 
    // set var equal to results 
    $netflix_query = $this->rest->get('catalog/titles/autocomplete', array('oauth_consumer_key'=>$this->consumer_key,'term'=> $search,'output'=>'json')); 

    //$this->rest->debug(); 

    //$json_data = $this->load->view('nice',$data,true); 
     //return $json_data; 

     echo json_encode($netflix_query); 
    } 

json으로 리턴

{"autocomplete": 
    {"autocomplete_item":[ 
     {"title":{"short":"The Strawberry Shortcake Movie: Sky's the Limit"}}, 
     {"title":{"short":"Futurama the Movie: Bender's Big Score"}}, 
     {"title":{"short":"Daffy Duck's Movie: Fantastic Island"}} 
     ... 

어떤 아이디어? 덕분에 .

당신이 나타났습니다, 당신이 배열하고 싶은 일을하지 않고, 반환
the url

+1

실제 문제는 무엇입니까? –

+0

또한 json 응답 중 일부를 게시합니다 – Rafay

+0

netflix가 json을 반환 할 때 json_encode를 수행하는 이유는 무엇입니까? netflix api에 익숙하지 않지만 귀하의 질문에서 본 것입니다. 그건 나에게 이상한 것처럼 보인다. 어쩌면 당신은 netflix repsonse를 전달해야한다. 이미 json으로 출력 되었기 때문이다. –

답변

0

확인을 나는 자동 완성 응답 방법에 보낼 필요가 올바른 형식으로 알아 낸 :
보기를

$("#movies").autocomplete({ 
     minLength: 2, 
     source: function(request, response) { 
      $.post("<?php echo base_url();?>welcome/search", {q: request.term}, 
       function(data){ 
        //console.log(data); 
        response(data); 

      }, 'json'); 
    }   
    }); 
컨트롤러

:

$search = $this->input->post('q'); 
     // Run some setup 
     $this->rest->initialize(array('server' => 'http://api.netflix.com/')); 
     // Pull in an array 
     $netflix_query = $this->rest->get('catalog/titles/autocomplete', array('oauth_consumer_key'=>$this->consumer_key,'term'=> $search,'output'=>'json'),'json'); 

     $json = array(); 
     foreach($netflix_query->autocomplete->autocomplete_item as $item){ 
      $temp = array("label" => $item->title->short); 
      array_push($json,$temp); 
     } 
     echo json_encode($json); 

필요했던 것을 다시 보낼 수 있었다 보기 개체 배열. 여러분의 모든 답변과 도움에 감사드립니다 !!

0

in와 일부 콘솔 로그가 있습니다. $.each

+0

I '$의 .each (data.autocomplete.autocomplete_item, 기능 (I) { \t \t \t 응답 (data.autocomplete.autocomplete_item에 코드 [I] .title.short을 보여주기 위해 질문을 수정합니다) \t \t \t})' 그리고 난 여전히 같은 결과를 얻을 수 –

+0

글쎄,)'$의 .each (data.autocomplete.autocomplete_item, 기능 (전, 항목) {응답 (item.title.short해야한다; })',하지만 분명히, autocomplete_item은 문자열입니다 ... – Malvolio

+0

주사위가 없습니다 ... 여전히 문자열 위치와 문자열 위치를 반환하는 배열 값을 통해 반복됩니다. 텍스트 상자는 검색으로 "스윙 어"가되며 자동 완성을 읽 S 을 내가 N g 전자 R S 매우 이상하고 실망 행동 ... –

0

내가 아는 한, for (property in object)은 인덱스를 통해 액세스하는 대신 각 속성에 액세스하려는 것을 의미합니다. 인덱스를 통해 액세스하려면 표준 for 루프를 사용하는 것이 좋습니다.

for (i in data.autocomplete.autocomplete_item) { 
    response(i.title.short); 
} 

내가 아직 테스트하지 않은하지만 난 당신이 아이디어를 생각 : 당신은 여전히 ​​코드를 사용하려면

for (i = 0; i <= 10; i++) { 
    response(data.autocomplete.autocomplete_item[i].title.short); 
} 

또는이를보십시오.

+0

어떤 주사위 ... 어딘가에 루프 승 위치 대신 개별 요소를 반환합니다. 내가 N g 전자 R 의 승 S 텍스트 상자에서와 같이 "스윙"이 될 것이지만, 자동 완성은 처럼 보인다 –

관련 문제