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

时间:2015-07-24 02:18:25

标签: javascript jquery ajax asynchronous typeahead.js

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>';
    }
  }
});

0 个答案:

没有答案