1

jQueryのドキュメントによると:

To execute a function after two ajax requests are successful:

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
/* a1 and a2 are arguments resolved for the 
    page1 and page2 ajax requests, respectively */
   var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
  if ( /Whip It/.test(jqXHR.responseText) ) {
  alert("First page has 'Whip It' somewhere.");
}
});

私はこれを持っています:

    $.when(
        file2store('resources/states_obj.txt?v=2', 'states'),
        file2store('resources/lgas_obj.txt?v=2', 'lgas'),
        file2store('resources/villages_obj.txt?v=2', 'villages'),
        file2store('resources/staff_obj.txt?v=2', 'staff')
    ).done(function(){
            console.log('All data put');
    }); 


    function file2store(url, store_name){
        $.getJSON(url, function(obj){ 

            db.put(store_name, obj).then(
              function(ids) {
                console.log(store_name+': '+ids.length + ' items put.');
              }, function(e) {
                throw e;
              }
            );

        });
    }

ajax コールバックの変数dbは、indexedDB Storage オブジェクトのグローバル変数であり、スクリプトの先頭で取得されます (ここには示されていません)。

  1. Deferredこれは jQueryコンストラクトの正しい使用法ですか?

  2. 関数呼び出しfile2storeはキューに入れられますか? つまり、次の呼び出しが開始される前に 1 つの呼び出しが終了することを確認しますか?

4

1 に答える 1

1

これは jQuery Deferred コンストラクトの正しい使用法ですか?

そうではありません。このメソッドは、AJAX 要求を作成する jQuery メソッドから返されwhen()たオブジェクトを受け入れます。そのため、コードが機能するには、そのオブジェクトdeferredが必要です。return

function file2store(url, store_name){
    return $.getJSON(url, function(obj) { // note the return here.
        // rest of your code... 
    });
}

関数呼び出し file2store はキューに入れられますか?つまり、次の呼び出しが開始される前に 1 つの呼び出しが終了することを確認しますか?

いいえ。それらは提供された順序で作成されますが、サーバーが応答する順序で完了します。

于 2014-06-29T15:56:02.047 に答える