我遇到了Auto complete插件的问题。这是我的代码:
var autocomplete = {
cache: {},
xhr: {}
};
$('#header .search input[type="text"]').autocomplete({
minLength : 2,
source: function (request,response) {
var q = request.term;
if( q in autocomplete.cache ) {
response( autocomplete.cache[q] );
return false;
} else {
autocomplete.hxr = $.getJSON("/search/autocomplete/nous?ajax=1&q="+q,function(data, status, xhr) {
autocomplete.cache[q] = data;
//if( autocomplete.xhr === xhr ) {
response(data);
//}
});
return true;
}
}
});
当我在输入中写入内容时(在本例中为“Hello”),我可以在Web开发人员工具中看到它返回一个json数组。所以,我在请求完成后得到了有效的回复。
0: "hello kitty"
1: "hello dolly and frieda"
2: "hello ass"
3: "hello there"
4: "hello do you make"
它正在执行ajax请求,但结果没有被推入下拉菜单,它是空的。任何帮助表示赞赏!!
谢谢!
答案 0 :(得分:1)
此答案基于评论:
这是使用延迟对象实现相同目标的方法:
var autocomplete = {
cache: {}
};
$('#header .search input[type="text"]').autocomplete({
minLength: 2,
source: function(request, response) {
var q = request.term;
if (!autocomplete.cache[q]) {
autocomplete.cache[q] = $.getJSON("/search/autocomplete/nous?ajax=1&q=" + q);
}
autocomplete.cache[q].done(response).fail(function(x,y,z){
alert(x.responseText + "\n-----\n" + y + "\n" + z);
});
}
});
编辑:看起来原始代码不起作用的原因是由于拼写错误。
Edit2:添加了失败处理程序