我试图在我的程序中实现动态自动完成功能。首次输入后它完美运行。但它没有显示第一次尝试的建议。但是,服务器正在响应自动完成所需的源。这是我的代码。
$('.autocomplete').live('keyup', function(){
$this = $(this);
var search = $this.val();
$.ajax({
url:'/package/index/search/keyword/'+search+'/format/json',
async: false,
success: function(res){
//console.log(res.options);
//console.log(res.defined_ids);
staticObject = res.defined_ids;
$this.autocomplete({
source: res.options
});
}
});
});
服务器端代码
$keyword = $this->_getParam('keyword');
$elementDetailModel = new Package_Model_ElementDetail();
$arr = $elementDetailModel->searchElementDetail($keyword);
$this->view->options = $arr['options']; // returns in the format array("test2","my new test", "night stay in delux room")
$this->view->defined_ids = $arr['defined_ids']; // returns in the format array(21::21=>"test2", 22::22=>"my new test", 24::24=>"night stay in delux room")
当我在firebug中控制记录的defined_ids和选项时,我在文本字段中键入't'时得到了以下响应。
选项:
[“test2”,“我的新考试”,“晚上住在豪华房间”]
defined_ids:
对象{21 :: 21 =“test2”,22 :: 22 =“我的新测试”,24 :: 24 =“晚上入住豪华房间”}
任何帮助都会很明显。提前谢谢。
答案 0 :(得分:0)
从firebug显示的格式不是JSON的格式。它是一个数组,可以使用索引进行访问。
当您显示输出时,请确保先json_encode()
数组,然后显示它。
例如,关于这个问题,你的最终数组看起来应该是这样的
$array['options'] = array("test2", "my new test", "night stay in room");
//Then you should echo the encoded the array to json
echo json_encode($array);
接下来,请确保您的观看次数已关闭。
答案 1 :(得分:0)
您可能忘记指定上下文服务器端。在控制器的_init()
方法中,添加:
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('actionName', 'json')
->initContext();
并确保使用操作控制器名称替换actionName
。
然后,$this->view->options = $arr['options']
将自动以有效的json格式转换。
有关AjaxContext here in the manual的更多信息。