2013-06-02 39 views
0

我發佈這個問題,因爲我不知道該怎麼辦。我在Zend看到過類似的問題,但已經接受的答案根本不適合我。沒有ZendX庫的Zend框架中的Jquery自動完成

環境: 的Zend Framework 1.12 jQuery的 :1.10.3對jQuery的ui.css,jQuery的1.9.1.js和1.10.3 jQuery的ui.js

當我使用默認功能的示例的jquery api文檔,一切都很流暢,它的作品奇觀。問題來了,當我把源連接到我的控制器的動作「自動完成」的URL。我的控制器確實不錯,IR JSON格式的迴應,但事情是,它是如此迴應:

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

所以你看,它則以1的陣列鍵「JSON」,這是鬱悶在心裏,因爲jquery不理解,jquery只需要/需要/查找數據的數組。所以我明白爲什麼它不起作用,但我不知道如何去解決它(我是PHP,zend和javascript的新手)。

對於控制器停止渲染viewscripts和佈局,併發送傳遞給視圖爲JSON的信息,我使用switchContext助手在init()方法:

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」價值「:」約翰「} ....

你可以看到我也嘗試使用json_encode()(這是什麼Zend_Json :: encode()使用),並回應,這就是發送的內容:

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

我不知道如何與訪問數據

有誰知道如何簡單地發送陣列[{「標籤」:「東西」,「值」:「事「} ...]就是這樣嗎?

或者沒有人知道我可以如何操作來自「source:」的響應,以便它讀取我的控制器響應的任何內容 - > response ['json']¿?

編輯

好吧,我相信我到一些東西。 jquery的api文檔有this example,我相信它正在做我想做的事:從源頭操縱resposne。所以,我想用下面的模擬天生到它:

$("#profesor").autocomplete({ 
     source:function(response) { 
      $.ajax({ 
       url: url, 
       dataType: "json", 
       success: function(data) { 
        console.log(data); 
        response(data['json']); 
       } 
      }); 
     }, 
     minLength:1 
    }); 

當它到達CONSOLE.LOG(數據),「數據」是我的控制器發送響應(一個與數組中的「JSON」鍵)。精彩,所以我應該做的就是將自動完成的響應設置爲data ['json'],但是一旦它到達該行......出現以下異常:「未捕獲類型錯誤:對象不是函數」 。那是什麼意思?它不能訪問自動完成的「響應」功能?

FINISH編輯 在此先感謝!

回答

0

由於我在「源代碼」中不小心編寫了函數,因此拋出了異常。 jquery api文檔中有這個函數包含兩個參數,第一個是鍵入到自動完成輸入元素的值(我的情況,它是具有ID「profesor」的文本類型),第二個是響應函數。如果您在「editted」部分查看我的代碼,您會注意到我只有一個參數,並且當我嘗試將它作爲函數調用時,異常(絕對正確)未捕獲類型錯誤:對象不是功能跳出。所以在這裏是做正確的方式:

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

我所做的就是追加「/學期/ typedTerm」到URL,這樣我的控制器能夠處理和查找以啓動該數據庫的任何東西。而且該jQuery將收到的反應是什麼,它希望:

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

再次,我不得不經歷這個向上和向下,因爲我的控制器發出的包裹在{「viewVariableName」 JSON數據: actualData]}和我需要的是:[actualData]。我注意到,這不會發生在那些不使用contextSwitch _helper的人身上,而是在應該發送json數據的每個動作上手動禁用佈局和渲染。

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

爲什麼我留在我的房間?因爲我寧願只指定控制器在一個地方發送帶有contextSwitch的json數據(因爲該控制器中的一些動作將發送json數據),而不是記住(並留下)兩行代碼在每個動作上。我想是'喜歡'的事情。

相關問題