Javascript 自动完成Ajax键始终未定义

Javascript 自动完成Ajax键始终未定义,javascript,ajax,autocomplete,Javascript,Ajax,Autocomplete,我正在使用autocomplete,当我删除phpspellcheckapi时,它可以正常工作。但是当我使用它的时候。它总是说键未定义。 在响应我的拼写检查api ajax运行之前,我想。如何先运行拼写检查api,然后运行ajax $("#school-searchbox-wrapper > .search").autocomplete({ source: function (request, response) {

我正在使用autocomplete,当我删除phpspellcheckapi时,它可以正常工作。但是当我使用它的时候。它总是说键未定义。 在响应我的拼写检查api ajax运行之前,我想。如何先运行拼写检查api,然后运行ajax

$("#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我将学习,但您能给出紧急解决方案吗