隨着deferred object
你可以鏈中的所有Ajax調用返回的一些鏈接pipe()
方法裏面一個承諾(見下面的控制檯輸出)
標記和js
<body>
<input type="checkbox" checked />
<input type="checkbox" checked />
<input type="checkbox" checked />
<input type="checkbox" checked />
</body>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script>
function doRequest() {
return $.post("script.php").done(function(response) {
console.log('Loaded in %d seconds', response);
});
}
$(document).ready(function(){
var dfd = $.Deferred(),
chain = dfd;
$('input:checked').each(function() {
chain = chain.pipe(function() {
return doRequest().promise();
});
});
chain.done(function() {
console.log('done')
});
return dfd.resolve();
});
</script>
腳本。 php
<?php
$seconds = rand(2, 5);
sleep($seconds);
header("Content-type: text/html");
echo($seconds);
?>
Sleep()
僅用於模擬響應的隨機延遲。在JavaScript控制檯,你應該看到這樣的事情:
你真的不應該同時或不同時發送100個Ajax請求。 – gdoron
每個請求觸發10個捲曲在服務器中。所以需要30秒。如果我一次發送100個數據,則需要100 * 30s。這將掛起我的服務器 –
聽起來像你做錯了事情。非常錯誤。 – gdoron