他に何をすべきかわからないので、この質問を投稿します。Zend で同様の質問を見たことがありますが、受け入れられた回答は単に私にとってはうまくいきません。
環境: Zend Framework 1.12 Jquery: jquery-ui.css 用の 1.10.3、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"}]}
ご覧のとおり、キー 'json' を持つ 1 の配列内にすべてを配置しますが、これは腹立たしいことです。Jquery はそれを理解していないため、jquery はデータを含む配列を必要/必要/検索するだけです。だから私はそれがうまくいかない理由を理解していますが、それを回避する方法がわかりません(私はphp、zend、およびjavascriptが初めてです)。
コントローラーがビュースクリプトとレイアウトのレンダリングを停止し、ビューに渡された情報を json として送信するには、init() メソッドで switchContext ヘルパーを使用します。
public function init() {
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('autocomplete', 'json')
->initContext();
}
オートコンプリートアクションは次のとおりです。
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":[{"label":"John-1"," のように "lala" になりました。値":"ジョン"}....
json_encode() (これは Zend_Json::encode() が使用するものです) を使用して、それをエコーすることも試みたことがわかります。これが送信されるものです:
[][{"label":"John-1","value":"John"},{"label":"Jay","value":"Jay-1"},{"label":"Lusi","value":"Lusi-1"}]
それを使ってデータにアクセスする方法さえ知りません。
配列 [{"label":"something", "value":"something"}...] をそのまま送信する方法を知っている人はいますか?
または、「source:」からの応答を操作して、コントローラーが応答するものを読み取る方法を知っている人はいますか?
編集
わかりました、私は何かに乗っていると思います。jqueryのAPIドキュメントにはこの例があり、ソースからの応答を操作するという、私が望むことをしていると思います。だから私はそれを次のように模倣しようとしました:
$( "#profesor" ).autocomplete({
source:function(response ) {
$.ajax({
url: url,
dataType: "json",
success: function( data ) {
console.log(data);
response(data['json']);
}
});
},
minLength:1
});
console.log(data) に到達すると、「data」はコントローラーが送信する応答です (配列に「json」キーを持つもの)。素晴らしいので、オートコンプリートの応答を data['json'] に設定するだけでよいのですが、その行に到達すると...次の例外が発生します:「Uncaught type Error: object is not a function」 . どういう意味ですか?オートコンプリートの「応答」機能にアクセスできないということですか?
FINISH EDIT よろしくお願いします!