随着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控制台,你应该看到这样的事情:
![output](https://i.stack.imgur.com/PRW6a.png)
你真的不应该同时或不同时发送100个Ajax请求。 – gdoron
每个请求触发10个卷曲在服务器中。所以需要30秒。如果我一次发送100个数据,则需要100 * 30s。这将挂起我的服务器 –
听起来像你做错了事情。非常错误。 – gdoron