Javascript 自动完成Ajax键始终未定义
我正在使用autocomplete,当我删除phpspellcheckapi时,它可以正常工作。但是当我使用它的时候。它总是说键未定义。 在响应我的拼写检查api ajax运行之前,我想。如何先运行拼写检查api,然后运行ajaxJavascript 自动完成Ajax键始终未定义,javascript,ajax,autocomplete,Javascript,Ajax,Autocomplete,我正在使用autocomplete,当我删除phpspellcheckapi时,它可以正常工作。但是当我使用它的时候。它总是说键未定义。 在响应我的拼写检查api ajax运行之前,我想。如何先运行拼写检查api,然后运行ajax $("#school-searchbox-wrapper > .search").autocomplete({ source: function (request, response) {
$("#school-searchbox-wrapper > .search").autocomplete({
source: function (request, response) {
var keys = request.term;
//console.log(key);
var mySpellInstance = new LiveSpellInstance()
mySpellInstance.AjaxDidYouMean(request.term);
mySpellInstance.onDidYouMean = function(suggestion, original){
var message="";
if(suggestion!=""){
var key = suggestion;
//alert(key);
}else{
var key = keys;
}
}
console.log(key);
$.ajax({
async: false,
url: SITE_URL + "books/search/school",
dataType: "json",
data: {
q: key
},
success: function (data) {
console.log(data);
response(data.response);
}
});
},
focus: function (event, ui) {
//$( "#search" ).val( ui.item.title ); // uncomment this line if you want to select value to search box
return false;
},
select: function (event, ui) {
window.location.href = "book-detail.php?id=" + ui.item.id;
}
}).data("ui-autocomplete")._renderItem = function (ul, item) {
var inner_html = "<div class='ui-menu-item-wrapper'>" + item.name + "</div>";
return $("<li></li>")
.data("item.autocomplete", item)
.append(inner_html)
.appendTo(ul);
}
$(“#学校搜索框包装器>.search”).autocomplete({
来源:功能(请求、响应){
var key=request.term;
//控制台日志(键);
var mySpellInstance=new LiveSpellInstance()
mySpellInstance.AjaxDidYouMean(request.term);
mySpellInstance.onDidYouMean=函数(建议,原始){
var message=“”;
如果(建议!=“”){
var键=建议;
//警报(键);
}否则{
var key=key;
}
}
控制台日志(键);
$.ajax({
async:false,
url:SITE_url+“图书/搜索/学校”,
数据类型:“json”,
数据:{
问:关键
},
成功:功能(数据){
控制台日志(数据);
答复(数据.答复);
}
});
},
焦点:功能(事件、用户界面){
//$(“#搜索”).val(ui.item.title);//如果要在搜索框中选择值,请取消对此行的注释
返回false;
},
选择:功能(事件、用户界面){
window.location.href=“book detail.php?id=“+ui.item.id;
}
}).data(“ui自动完成”)。\u renderItem=功能(ul,项目){
var internal_html=“”+item.name+”;
返回$(“”)
.data(“item.autocomplete”,item)
.append(内部\u html)
.附录(ul);
}
您在函数内部定义了键,因此在同一范围内不可用。。。看起来您有一个异步调用,因此不确定key将如何访问该Ajax调用……即使key被声明为一级(对$.Ajax()可见)并在spellchecker回调中为其分配了一个值,您仍然无法保证在$.Ajax中看到spellchecker设置的值,因为spellchecker回调是异步的。$。在拼写检查器的回调完成时,将已经调用ajax()。您需要学习Promise和/或async/await以及如何链接异步调用堆栈。@marekful我将学习,但您能给出紧急解决方案吗