を完了したとき、私は現在、次のコードを持って見つけます。当初私は$ getJSONリクエストを1つしか持っていなかったので、要求が行われたときに上記のコードに従ってモーダルウィンドウが閉じられました。は、両方のJSON要求が
別の$ getJSONリクエストを追加しようとしていますが、両方の$ getJSONリクエストが完了した場合にのみモーダルウィンドウを閉じたいと考えています。
これを達成する最良の方法は何ですか?
を完了したとき、私は現在、次のコードを持って見つけます。当初私は$ getJSONリクエストを1つしか持っていなかったので、要求が行われたときに上記のコードに従ってモーダルウィンドウが閉じられました。は、両方のJSON要求が
別の$ getJSONリクエストを追加しようとしていますが、両方の$ getJSONリクエストが完了した場合にのみモーダルウィンドウを閉じたいと考えています。
これを達成する最良の方法は何ですか?
あなたは(getJSONのようなショートカットを含む)すべてのjQueryのAJAXリクエストが他のアクションを制御するために使用することができ繰延オブジェクトを返す$.when()
を探しています。
var dfd1 = $.getJSON(url1, function (items) {
// Do something
});
var dfd1 = $.getJSON(url2, function (items) {
// Do something
});
$.when(dfd1, dfd2).then(function(){
//both succeeded
utility.messageBoxClose();
},function(){
//one or more of them failed
});
あなたはgetJSONsが正常かどうか戻ってきて、代わりにのみ、彼らがあなたの代わりにすることができます行われていることを気にするかどうかを気にしない場合:
$.when(dfd1, dfd2).done(utility.messageBoxClose);
変数
function render(url1, url2, message) {
utility.messageBoxOpen(message);
var isOneDone = false;
$.getJSON(url1, function (items) {
// Do something
if(!isOneDone)
isOneDone = true;
else
utility.messageBoxClose();
});
$.getJSON(url2, function (items) {
// Do something
if(!isOneDone)
isOneDone = true;
else
utility.messageBoxClose();
});
}
あなたが同じことを実現しますが、あなたに、より柔軟与え$.ajax
を使用したものとgetJSON()
コール置き換えることができます。
$.ajax({
url: http://whatever,
dataType: 'json',
async: false,
data: {data},
success: function(data) {
// do the thing
}
});
注意をasync:false
一部これにより、要求が完了するまでコードの実行が一時停止します。 2つのコールをこのようにして、2つ目のコールが完了した後にダイアログを閉じることができます。
'async:false'は使用しないでください。ほとんど常に間違ったアプローチです。 –
特に、コールが非常に短い待ち時間であることがわかっている場合は、私は同意しません。同時性を「偽造する」方法がありますが、私が見たほとんどのものはあまりにも複雑で壊れやすいものです。それは80/20のルールです。ほとんどの場合、とにかく同期呼び出しを行っていることは重要ではありません。もしそうなら、おそらくもっと大きな問題があるでしょう。 – kprobst
function render(url1, url2, message) {
utility.messageBoxOpen(message);
$.when($.getJSON(url1, function (items) {
// Do something
utility.messageBoxClose();
}), $.getJSON(url2, function (items) {
// Do something
})).then(function() {
//Both complete
});
}
あなたがすることができ両方の$ getJSONリクエストが完了したときよりも少し具体的ですか?両方が単純に終了したときを意味しますか?両方とも正常に返ってきたときは意味しますか? – Sinetheta