2012-04-15 3 views
0

내 프로그램에서 동적 자동 완성을 구현하려고했습니다. 처음 입력 한 후 완벽하게 작동합니다. 그러나 첫 번째 시도에 대한 제안은 보이지 않습니다. 그러나 서버가 자동 완성에 필요한 소스에 응답하고 있습니다. 여기 내 코드가있다.jQuery 자동 완성이 첫 번째 시도에서 작동하지 않습니다.

 $('.autocomplete').live('keyup', function(){ 
     $this = $(this); 
     var search = $this.val(); 
     $.ajax({ 
      url:'/package/index/search/keyword/'+search+'/format/json', 
      async: false, 
      success: function(res){ 
       //console.log(res.options); 
       //console.log(res.defined_ids); 
       staticObject = res.defined_ids; 
       $this.autocomplete({ 
        source: res.options 
       }); 
      } 
     });    
    }); 

서버 측 코드는 내가 텍스트 필드에 't'를 입력 한 경우

$keyword = $this->_getParam('keyword'); 
    $elementDetailModel = new Package_Model_ElementDetail(); 
    $arr = $elementDetailModel->searchElementDetail($keyword); 
    $this->view->options = $arr['options']; // returns in the format array("test2","my new test", "night stay in delux room") 
    $this->view->defined_ids = $arr['defined_ids']; // returns in the format array(21::21=>"test2", 22::22=>"my new test", 24::24=>"night stay in delux room") 

내가 불을 지르고 로그인 defined_ids 및 옵션을 콘솔

, 나는 다음있어 반응이다.
옵션 :

[ "TEST2", "나의 새로운 테스트", "디럭스 룸에서 박"]

defined_ids :

오브젝트 {21 : 21 = "test2", 22 :: 22 = "내 새로운 테스트", 24 : 24 = "delux room에서의 밤 숙박"}

도움이 될만한 도움이 될 것입니다. 미리 감사드립니다.

+0

아마도 서버 문제 일 수 있습니다. 방화범에서 뭐가 보이니? 바이올린을 줄 수 있어요? – gdoron

+0

res.options의 경우 "[test2", "새로운 테스트", "delux room에서의 밤 숙박]과 같은 이런 종류의 응답을 받았습니다. –

+0

레지스트리 \t 개체 {Zend_View_Helper_Doctype = {...}, Zend_View_Helper_Placeholder_Registry = { ...}, db = {...}, more ...} \t 경로 \t "/ 패키지/인덱스" \t 옵션 \t [ "TEST2", "나의 새로운 테스트", "디럭스 룸에서 박"] \t \t "TEST2" \t \t "나의 새로운 테스트" \t defined_ \t \t "디럭스 룸에서 박" IDS \t 오브젝트 {= "TEST2"21 : 21, 22 : 21 = "나의 새로운 테스트", 24 : 24 = "디럭스 룸에서 박"} \t 21 : 21 \t "TEST2" \t 22 : 21 \t "나의 새로운 테스트" \t 24 : 24 \t "디럭스 룸에서 박"........... 전체 응답. –

답변

0

방화 광에서 표시되는 형식은 JSON 형식이 아닙니다. 인덱스를 사용하여 액세스되는 배열입니다.

출력을 표시 할 때 배열 우선 json_encode()을 확인한 다음 표시하십시오.

예를 들어, 질문에 대한, 당신은 최종 배열이

$array['options'] = array("test2", "my new test", "night stay in room"); 
//Then you should echo the encoded the array to json 

echo json_encode($array); 

다음과 같을 반드시 전망이 요청을 해제하고 있는지 확인해야한다.

+0

변수에 반환해야합니다. 그래서 json_encode를했을 때 작동하지 않는 응답을 받았습니다. 옵션 "["test2 ","내 새로운 테스트 "]" –

+0

@ BashantaDahal जी, 당신은 json으로 인코딩 된 변수를 에코해야합니다. 더 많은 데이터와 코드가 없으면 당신을 도울 수 없습니다. – Starx

+0

답변 해 주셔서 감사합니다. 각 요청 후에 변수 staticObject = res.defined_ids를 지정해야하기 때문에 defined_ids도 필요합니다. 다음은 서버 측 코드입니다.'code' –

0

당신은 아마도 컨텍스트가 서버 측을 지정하는 것을 잊어 버렸을 것입니다. 당신이 컨트롤러의 _init() 방법, 추가

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('actionName', 'json') 
      ->initContext(); 

을하고 액션 컨트롤러 이름으로 actionName을 교체해야합니다.

그러면 $this->view->options = $arr['options']은 유효한 json 형식으로 자동 변환됩니다.

AjaxContext here in the manual에 대한 자세한 정보입니다.

+0

답변 해 주셔서 감사합니다. 나는 당신이 언급 한 것과 똑같은 일을했습니다. 하지만 여전히 작동하지 않습니다. 처음 시도한 후에 작동합니다. 처음 시도한 후에 자동 완성이 작동하지 않는 이유를 모르겠습니다. –

+0

이상하게 들리지만 문제를 해결하는 데 도움이되는 정보가 필요합니다 (방화범이 무슨 말을하니?). 또한, [ZendX_JQuery] (http://framework.zend.com/manual/1.11/en/zendx.jquery.html) 사용을 고려 했습니까? ('ZendX_JQuery_Form_Element_AutoComplete') – Liyali

+0

나는이 질문을 편집했다. 내 문제에 대해 더 많은 생각을 가질 수 있기를 바랍니다. –

관련 문제