我发布这个问题是因为我不知道还能做什么。我在 Zend 中看到过类似的问题,但已被接受的答案根本不适合我。
环境: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 的新手)。
为了让控制器停止渲染视图脚本和布局并将传递给视图的信息作为 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”,如 {"lala":[{"label":"John-1","价值":"约翰"}....
你可以看到我也尝试使用 json_encode() (这是 Zend_Json::encode() 使用的),并回显它,这就是发送的内容:
[][{"label":"John-1","value":"John"},{"label":"Jay","value":"Jay-1"},{"label":"Lusi","value":"Lusi-1"}]
我什至不知道如何使用它访问数据。
有谁知道如何像这样简单地发送数组 [{"label":"something", "value":"something"}...] ?
或者有谁知道我可以如何操纵来自“来源:”的响应,以便它读取我的控制器响应的任何内容--> response['json']¿?
编辑
好吧,我相信我在做某事。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' 键的响应)。太好了,所以我应该做的就是将自动完成的响应设置为数据 ['json'],但是一旦到达该行......就会出现以下异常:“未捕获类型错误:对象不是函数” . 这意味着什么?它无法访问自动完成的“响应”功能?
完成编辑 提前谢谢!