2017-09-14 84 views
2

我在页面上选择的下拉列表从AJAX调用通过以下方式填充。有什么不起作用的是我需要在callback()方法调用之后运行一些附加代码,但它永远不会持续到回调的其余部分。举例来说,在成功回调以下不运行所确定的附加代码:选择Ajax回调

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()方法调用后中止。

+0

它没有任何意义。超时0做内部函数异步,所以只有解释是回调函数期间错误/无限循环..这是愚蠢的问题,但你检查控制台? – bigless

+0

@ bigless这是一个非常好的问题,Zamrony是对的,我忘记了一个参数,所以我处理的是未定义的,但由于某种原因被吞噬了,不知道为什么。同样,我并不是在建议'setTimeout'作为答案,但是我注意到并尝试了一些东西...... –

回答

0

load需要两个参数querycallback

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

您的代码没有通过任何这些参数的,所以它是非常有可能的是,当success()被调用时,callback()功能是不确定的。 我建议放置断点并检查它。