Javascript js ajax远程数据源仅适用于同步ajax请求

Javascript js ajax远程数据源仅适用于同步ajax请求,javascript,jquery,ajax,asynchronous,typeahead.js,Javascript,Jquery,Ajax,Asynchronous,Typeahead.js,当同步而非异步提交请求时,Typeahead.js仅适用于自定义ajax远程数据源。异步提交时(async:true),我的脚本和自定义TABoards()函数在cb()函数传播结果列表之前执行完毕。我下面的代码工作完美,并从两个数据源生成结果:一个远程ajax数据源和一个“静态”数据源,该数据源始终生成一个“查看[查询]的所有结果”结果。但是,生成的代码也会在浏览器javascript控制台中产生以下通知:“主线程上的同步XMLHttpRequest被弃用,因为它会对最终用户的体验产生有害影响

当同步而非异步提交请求时,Typeahead.js仅适用于自定义ajax远程数据源。异步提交时(async:true),我的脚本和自定义TABoards()函数在cb()函数传播结果列表之前执行完毕。我下面的代码工作完美,并从两个数据源生成结果:一个远程ajax数据源和一个“静态”数据源,该数据源始终生成一个“查看[查询]的所有结果”结果。但是,生成的代码也会在浏览器javascript控制台中产生以下通知:“主线程上的同步XMLHttpRequest被弃用,因为它会对最终用户的体验产生有害影响。”添加“.done(function(){cb(response)};”不起作用

除了不生成浏览器通知外,如何重写此代码以使其功能完全相同

var TABoards = function(q, cb){
  $.ajax({
    dataType: "json",
    async: false,
    url: '/typeahead.php?q='+q+'&type=boards',
    success: function(response){
      cb(response);
    }
  });
}
$('#hdrSrchQ').typeahead({
  highlight: true,
  hint: false,
  minLength: 3
}, {
  name: 'ta-boards',
  displayKey: 'title',
  source: TABoards,
  templates: {
    header: '<h4>Boards</h4>',
    suggestion: function(data){
      return '<a href="/'+ data.name  +'">' + data.title + ' - ' + data.name + '</a>';
    }
  }
},{
  name: 'ta-viewall',
  displayKey: 'value',
  source: function(q, cb){
    cb([{'value': q}]);
  },
  templates: {
    suggestion: function(data) {
      return '<a href="/?q=' + data.value + '">View all results for ' + data.value + '...</a>';
    }
  }
});
var TABoards=函数(q,cb){
$.ajax({
数据类型:“json”,
async:false,
url:'/typeahead.php?q='+q+'&type=boards',
成功:功能(响应){
cb(响应);
}
});
}
$('#hdrSrchQ')。提前键入({
推荐理由:没错,
提示:错,
最小长度:3
}, {
名称:“ta板”,
displayKey:'标题',
资料来源:TABoards,
模板:{
标题:“董事会”,
建议:功能(数据){
返回“”;
}
}
},{
名称:“ta viewall”,
displayKey:'值',
来源:功能(q,cb){
cb([{'value':q}]);
},
模板:{
建议:功能(数据){
返回“”;
}
}
});
Solved:Typeahead.js的文档很弱,这就是为什么它不能异步工作的原因。位于的文档说明了dataset源参数:应该是带有签名的函数(查询、syncResults、asyncResults)。应使用同步计算的建议调用syncResults,使用异步计算的建议调用asyncResults(例如,针对AJAX请求的建议)。解决的异步数据源需要第三个参数,即异步请求的回调函数。因此,我对函数TABoards()的修订定义如下:
var skryTABoards=function(q,cb,cb){
第三个参数cb是接收异步数据时的回调函数,它将在建议列表上显示异步结果。