2012-01-17 3 views
1

を完了したとき、私は現在、次のコードを持って見つけます。当初私は$ getJSONリクエストを1つしか持っていなかったので、要求が行われたときに上記のコードに従ってモーダルウィンドウが閉じられました。は、両方のJSON要求が

別の$ getJSONリクエストを追加しようとしていますが、両方の$ getJSONリクエストが完了した場合にのみモーダルウィンドウを閉じたいと考えています。

これを達成する最良の方法は何ですか?

+0

あなたがすることができ両方の$ getJSONリクエストが完了したときよりも少し具体的ですか?両方が単純に終了したときを意味しますか?両方とも正常に返ってきたときは意味しますか? – Sinetheta

答えて

2

あなたは(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); 
2

変数

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(); 
}); 

}

0

あなたが同じことを実現しますが、あなたに、より柔軟与え$.ajaxを使用したものとgetJSON()コール置き換えることができます。

$.ajax({ 
    url: http://whatever, 
    dataType: 'json', 
    async: false, 
    data: {data}, 
    success: function(data) { 
    // do the thing 
    } 
}); 

注意をasync:false一部これにより、要求が完了するまでコードの実行が一時停止します。 2つのコールをこのようにして、2つ目のコールが完了した後にダイアログを閉じることができます。

+1

'async:false'は使用しないでください。ほとんど常に間違ったアプローチです。 –

+0

特に、コールが非常に短い待ち時間であることがわかっている場合は、私は同意しません。同時性を「偽造する」方法がありますが、私が見たほとんどのものはあまりにも複雑で壊れやすいものです。それは80/20のルールです。ほとんどの場合、とにかく同期呼び出しを行っていることは重要ではありません。もしそうなら、おそらくもっと大きな問題があるでしょう。 – kprobst

0
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 
    }); 
} 

jQuery.when

関連する問題