$。等不及等待ajax返回

时间:2011-12-10 22:02:06

标签: javascript jquery

我有这段代码

$('#mySelect').change(function() {
  $.get(
    "test.php",
    function(data) { alert('test1'); }
  );
});

我需要触发#mySelect的事件更改,并等待ajax的答案执行其他任务。但是当我尝试

$.when($('#mySelect').change()).done(function() { alert('test2'); });

它只等待更改完成,并且ajax发送,未收到。 所以我在'test1'之前有警告'test2' 我怎样才能赚取$。等待甚至内部的所有内容完成?

2 个答案:

答案 0 :(得分:3)

您必须先保存$.get()返回的延迟对象,然后在$.when中使用。

var getReq;

$('#mySelect').change(function() {
  getReq = $.get(
    "test.php",
    function(data) { alert('test1'); }
  );
});

$.when(getReq).done(function() { alert('test2'); });

答案 1 :(得分:2)

你非常接近,你只需要在change事件匿名函数中返回延迟对象:

$('#mySelect').change(function() { 
    return $.get( 
      "test.php", 
      function(data) { alert('test1'); }//I removed the trailing comma here, it will cause problems
    ); 
}); 
$.when($('#mySelect').change()).done(function() { alert('test2'); }); 

这将返回与$.get() AJAX调用关联的延迟对象。这样$.when()将等待AJAX​​调用完成,然后在.done()中运行该函数(您也可以使用.then())。