adeferred object
を使用すると、すべてのajax呼び出しをチェーンして、いくつかのチェーンされたpipe()
メソッド内でpromiseを返すことができます(以下のコンソール出力を参照)
マークアップと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>
script.php
<?php
$seconds = rand(2, 5);
sleep($seconds);
header("Content-type: text/html");
echo($seconds);
?>
Sleep()
応答のランダムなレイテンシーをエミュレートするためにのみ使用されました。javascriptコンソールでは、次のように表示されます。