多次发出ajax请求

时间:2014-05-29 18:01:04

标签: javascript jquery ajax loops

我有三个"来源,"每个都需要进行ajax调用。但是,因为Ajax是异步的,所以我不能把它放在for循环中。与此同时,我无法async: false,因为浏览器挂起是不好的。

因此,我决定在其success回调中多次调用Ajax,并构造一种人工循环。问题是,它无法正常工作(我将在稍后的问题中解释错误)。这是我的相关代码。

    counter: 0,
    load: function(source, start_month, end_month, start_year, end_year) {
      start_month = parseInt(start_month) + 1;
      end_month = parseInt(end_month) + 1; 
      var parseDate = d3.time.format("%Y-%m-%d").parse; 
      if(source == 0) {
        $.ajax({
          dataType: "json",
          url: ...
          data: {
              ...
          },
          crossDomain: true,
          success: function(raw_data) {
            posts.counter++;
            if(posts.counter < 4) {
              alert(posts.counter);
              posts.load(source, start_month, end_month, start_year, end_year);
            } else {
              alert("plot graph");
            }
          }
        });
      }
...

整个代码块存在于posts闭包内。只是几个问题:

  1. 这是好风格吗?有没有更有效的方法来做这件事?

  2. 出于某种原因alert只发射了两次......不应该这样     用1,2和3射击3次?

1 个答案:

答案 0 :(得分:1)

我建议使用JS promises(又名deferred对象)。查看jQuery的when和then函数(http://api.jquery.com/jquery.when/http://api.jquery.com/deferred.then/)。您可以使用延迟对象进行3次异步调用,并等待处理数据,直到所有3次调用都返回。