【问题标题】:Selectize Ajax Callbacks选择 Ajax 回调
【发布时间】:2018-02-23 23:30:56
【问题描述】:

我在页面上的选择下拉列表通过以下方式从 AJAX 调用中填充。不起作用的是我需要在 callback() 方法调用之后立即运行一些额外的代码,但它永远不会继续到回调的其余部分。例如,成功回调中的以下代码不会运行标识的附加代码:

var $ddl = $("#ContactID");
var control = $ddl[0].selectize;

control.load(function () {
   $.ajax({
      url: "validURL",
      type: "post",
      dataType: "json",
      data: {
         id: recordID
      },
      error: function () {
         alert("Error retrieving data");
         callback();
      },
      success: function (result) { 
         callback(result.data);   
         //Does not get called below
         loadAdditionalInformation(recordID);
      }
   });
});

但是,如果我这样做,它会起作用:

success: function (result) {
         window.setTimeout(function() { 
            callback(result.data);   
         }, 0);

         loadAdditionalInformation(recordID);
}

我需要在加载列表时调用一个方法,所以我不确定是否要继续,那么为什么在callback() 方法调用之后成功回调中止。

【问题讨论】:

  • 这没有意义。 timeout 0 内部函数是异步的,所以唯一的解释是回调函数期间的错误/无限循环。这是个愚蠢的问题,但你检查过控制台吗?
  • @bigless 这是一个非常好的问题,Zamrony 是对的,我忘记了一个参数,所以我正在处理 undefined,但由于某种原因它被吞了,不知道为什么。同样,我并没有建议 setTimeout 作为答案,而是我注意到并尝试过的事情......

标签: javascript jquery html jquery-plugins selectize.js


【解决方案1】:

load 需要两个参数,querycallback

 $('#ContactID').selectize({
      ....
      load : function (query, callback) {
         $.ajax({
             ....
             success : function(res) {
                   callback(res.data);
                   doOtherThings(res);
             }
         });
      }
 });

您的代码没有传递任何这些参数,因此很可能在调用success() 时,callback() 函数未定义。 我建议放置断点并检查它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多