2013-06-02 2 views
0

그 밖에 무엇을해야할지 모르므로이 질문을 게시하고 있습니다. 젠드 (Zend)에서 비슷한 질문을 보았습니다. 그러나 받아 들여지는 답변은 단순히 나를 위해 일하지 않습니다.ZendX 라이브러리가없는 Zend Framework의 Jquery 자동 완성

환경 : 젠드 프레임 워크 1.12 JQuery와 : JQuery와 - ui.css에 대한 1.10.3, JQuery와-1.9.1.js 및 1.10.3 JQuery와 - ui.js

나는 기본 기능 예제를 사용

jquery API 문서 중 모든 것이 부드럽고 놀라운 기능을합니다. 문제는 내 컨트롤러의 "자동 완성"작업에 연결되는 URL을 소스로 배치 할 때 발생합니다. 내 컨트롤러는 그래서 응답, 적외선은 JSON 형식으로 응답하지만, 일이, 좋은 않습니다 : 그것은 미치게 키 'JSON'과 1의 배열, 내부에 모든 것을 배치,

{"json":[{"label":"John-1","value":"John"},{"label":"Jay","value":"Jay-1"},{"label":"Lusi","value":"Lusi-1"}]} 

그래서 당신이 볼, Jquery가 이해하지 못하기 때문에 jquery는 데이터가있는 배열 만 찾고 싶어합니다. 그래서 나는 그것이 작동하지 않는 이유를 이해하지만, 나는 그것 (나는 php, zend 및 javascript에 익숙하지 않다)을 둘러 보는 방법을 모른다. viewscripts 레이아웃 렌더링 중지 JSON 같은 뷰에 전달하는 정보를 전송하는 제어기를 들어

, I는 초기화() 메소드에 switchContext 헬퍼를 사용 여기
public function init() { 
     $contextSwitch = $this->_helper->getHelper('contextSwitch'); 
     $contextSwitch->addActionContext('autocomplete', 'json') 
       ->initContext(); 
    } 

가 autocompleteAction이다

public function autocompleteAction() 
    { 
     $autocomplete_data=array(
      array('label'=>'John-1', 'value'=>'John'), 
      array('label'=>'Jay', 'value'=>'Jay-1'), 
      array('label'=>'Lusi', 'value'=>'Lusi-1') 
     ); 
     //echo Zend_Json::encode($autocomplete_data); 
     $this->view->json= $autocomplete_data; 
    } 

보시다시피 전송 된 모든 자동 완성 정보의 데이터를 "json"으로 설정하는 이유는보기로 전달되는 변수의 이름입니다. (json을 "lala"라는 변수 이름으로 변경하여 테스트했으며, URL을 통해 액세스 할 때 배열의 키는 "lala"와 같이 "lala"였습니다 : [{ "label": "John-1", " 값 ":"John "} ....

또한 json_encode() (Zend_Json :: encode()가 사용하는 것임)를 사용하여 시도해 보았습니다. 그리고이를 반향 출력하여 전송됩니다.

[][{"label":"John-1","value":"John"},{"label":"Jay","value":"Jay-1"},{"label":"Lusi","value":"Lusi-1"}] 

난 그와 함께 데이터에 액세스하는 방법을 알고하지는

사람이 단순히 배열 [{ "라벨"보내는 방법을 알고 있나요 :. "뭔가", "값을": "뭔가를 "} ...] 그 것처럼?

또는 "소스 :"응답을 조작 할 수있는 방법을 아는 사람은 내 컨트롤러가 응답하는 모든 것을 읽습니다. -> 응답 [ 'json'] ¿?

편집

좋아, 내가 뭔가에 나는 생각합니다. jquery에 대한 API 문서는 this example이며, 소스에서 resposne을 조작하여 원하는대로하고 있다고 생각합니다.

는 (데이터) CONSOLE.LOG에 도착
$("#profesor").autocomplete({ 
     source:function(response) { 
      $.ajax({ 
       url: url, 
       dataType: "json", 
       success: function(data) { 
        console.log(data); 
        response(data['json']); 
       } 
      }); 
     }, 
     minLength:1 
    }); 

는 '데이터'내 컨트롤러가 보내는 응답 (배열에서 'JSON'키를 사용하여 하나입니다 그래서 나는 다음 그것을 해내 시도). 멋진, 그래서해야 할 일은 자동 완성에 대한 응답을 데이터 [ 'json']로 설정하는 것입니다. 그러나 일단 그 행에 도달하면 ... 다음과 같은 예외가 발생합니다 : "잡히지 않은 유형 오류 : 객체가 함수가 아닙니다." . 그게 무슨 뜻 이죠? 그것은 자동 응답의 "응답"기능에 액세스 할 수 없습니까?

끝내기 편집 미리 감사드립니다.

답변

0

"source"에 함수를 부주의하게 작성하여 예외가 발생했습니다. jquery API 문서에는이 함수가 두 개의 매개 변수를 포함하고 있는데, 첫 번째는 autocomplete 입력 요소에 입력 된 값입니다 (제 경우는 id가 "profesor"인 유형 텍스트였습니다). 두 번째는 응답 함수입니다. "editted"부분에서 내 코드를 보면, 하나의 매개 변수 만 있다는 것을 알게 될 것이고, 함수로 예외를 호출하려고 할 때 (절대적인 권한으로) 잡히지 않은 유형 오류 : 객체가 아닙니다. 함수이 튀어 나오지 않습니다. 그래서 여기에 그것을 할 올바른 방법은 다음과 같습니다

$("#profesor").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        url: url+'/term/'+request.term, 
        dataType: "json", 
        success: function(data) { 
         response(data['json']); 
        } 
       }); 
      } 
     }); 

은 내가 한 것은 APPEND이었다 URL에 "/ 용어/typedTerm"내 컨트롤러가 처리하고 그 시작 아무것도에 대한 데이터베이스에서 검색 할 수 있도록 (듯이). 그리고 JQuery와받을 것이라는 응답은 원하는 무엇인가 :

[{"label":"YourLabel","value":"LabelValue"},{"label":"Yourlabel2","value":"YourValue2"}] 

다시 한번, 내 컨트롤러가 { "viewVariableName"에 싸여 JSON 데이터를 전송하기 때문에이 상하 통과해야했다 : 실제 데이터]} 그리고 내가 필요한 것은 : [실제 데이터]. contextSwitch _helper를 사용하지 않고 json 데이터를 보낼 모든 동작에 대해 수동으로 레이아웃과 렌더링을 사용하지 않는 사람들에게는 이것이 발생하지 않는다는 것을 알았습니다.

$this->_helper->viewRenderer->setNoRender(true); 
$this->_helper->layout->disableLayout(); 
....logical stuff here... 
echo Zend_Json::encode($DataToSend); 

왜 내가 광산과 함께 있었습니까? 컨트롤러의 몇 가지 동작이 json 데이터를 보내려고하기 때문에 contextSwitch를 사용하여 json 데이터를 보내려는 컨트롤러를 지정하기보다는 두 줄의 코드를 기억하는 것입니다. 각 동작마다. 내가 좋아하는 것의 문제.