我發佈這個問題,因爲我不知道該怎麼辦。我在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編輯 在此先感謝!