2014-09-10 64 views
0

有什麼方法可以集成Jquery Queue請求處理一旦第一個請求獲得Success響應,然後調用下一個請求。Jquery Queue請求集成一次首次請求成功,然後調用下一個請求

僅供參考我用ajaxManager作爲下面的代碼,但它不等待先前的請求成功響應。

$(function() { 
    ajaxManager.run(); 
    for (key in Reports) { 
     var Url = Reports[key]; 
     if (Url != '') { 
      sendRequest(Url, key); 
     } 
    } 
}); 

function sendRequest(Url, act_id) { 
    ajaxManager.addReq({ 
     async: false, 
     cache: false, 
     url: Url, 
     type: "POST", 
     data: {}, 
     dataType: "jsonp", 
     success: function(response) { 
      console.log(response); 
     } 
    }); 
} 

有沒有其他辦法可以處理這個問題。

謝謝。

回答

0

這裏是你如何能做到這一個簡單的例子(我保存在一個陣列上的報告)利用jQuery.queue()jQuery.dequeue()

var reports = [11, 12, 14, 15]; 
function doTheReport() { 
    if (reports.length === 0) { 
     alert('All reports are done now.'); 
     return; 
    } 

    var report_Id = reports.pop(); 
    $.ajax({ 
     url: "/DoTheReport", 
     complete: function() { 
      doTheReport(); 
     } 
    }); 
}; 
0

嘗試

$(function() { 
    // requests url and data objects 
    var Reports = [{ 
     "url": "url1", 
     "data": JSON.stringify([1]) 
    }, { 
     "url": "url2", 
     "data": JSON.stringify([2]) 
    }, { 
     "url": "url3", 
     "data": JSON.stringify([3]) 
    }]; 
    // all responses 
    var responses = []; 
    // jQuery.deferred , resolved when all requests completed 
    var requests = new $.Deferred() || $(requests); 
    // do stuff when all requests completed 
    requests.done(function (data) { 
     console.log(data); 
     alert(data.length + " requests completed"); 
     $.each(data, function (k, v) { 
      $("#results").append(v + "\n") 
     }) 
    }); 
    // `request` fn 
    var request = function (url, data) { 
     return $.post(url, { 
      json: data 
     }, "json") 
    }; 
    // `response` fn 
    var response = function (data, textStatus, jqxhr) { 
     // if response `textStatus` === `success` , do stuff 
     if (textStatus === "success") { 
      console.log(data, textStatus); 
      responses.push([textStatus, data, $.now()]); 
      // if items in queue , dequeue next item 
      if ($.queue(requests, "ajax").length) { 
       $.dequeue(requests, "ajax") 
      } else { 
       // if items not in queue , resolve requests 
       requests.resolve(responses) 
      } 
     }; 
    }; 
    // `error` fn 
    // var error = function() {}; 
    // create queue of `request` functions 
    $.each(Reports, function (k, v) { 
     $.queue(requests, "ajax", function() { 
      return request(v.url, v.data) 
      .then(response /* , error */) 
     }) 
    }); 
     // dequeue first item in queue 
     $.dequeue(requests, "ajax") 
}) 

的jsfiddle http://jsfiddle.net/guest271314/mgqhzejh/

相關問題