2016-05-08 6 views
3

JavaScriptでは、同じ関数を3回呼び出していますが、返す順序は毎回変わります。あなたは私のコードを以下で見ることができます。場合によっては、page1.htmlが最初に読み込まれることがありますpage2.htmlJquery関数の返品の問題

この問題を解決するにはどうすればよいですか?あなたはページのHTMLが非同期で取得するためにHTTP呼び出しを使用しているため、事前に

おかげで

$(document).ready(function() { 
    $("#button").click(function() { 
     addHtml('page1'); 
     addHtml('page2'); 
     addHtml('page3'); 
    }); 
}); 

function addHtml(url) { 
    if ($("#" + url).length == 0) { 
     $.get(url+'.html', function (result) { 
      $('.divtest').append(result); 
     }); 
    } 
}; 
+0

一つの重要な点は、 '$( "#のPAGE2")と言った場合にどうするかであるlength'が '0'ではありません。それは停止するか、 'page3'を試みるべきですか?それを継続する必要がある場合は、すべての要求を同時に行うことが有益なように見えるので、全体の時間は、すべての要求の合計ではなく、最長の要求の時間になります。 –

答えて

1

シンプルなソリューション:検討すべき

$(document).ready(function() { 
    $("#button").click(function() { 
     addHtml('page1', function(){ 
      // page 1 added 
      addHtml('page2', function(){ 
      // page 2 added 
      addHtml('page3', function(){ 
       // All HTML added 
      }); 
      }); 
     }); 
    }); 
}); 

function addHtml(url, callback) { 
    if ($("#" + url).length == 0) { 
     $.get(url+'.html', function (result) { 
      $('.divtest').append(result); 
      callback(); 
     }); 
    } 
}; 
+0

それは素晴らしいです。どうもありがとうございます。 – Grcn

+0

ネストされたコールバックだけが不便です。彼らは非常に醜いです。シンプルな解決策は素晴らしいですが、約束は私たちのコードをpretiffyに来る=) –

+0

コールバック地獄ではないですか? 'callback()'を返す必要はありません。 –

3

それは、非ブロッキングを意味します。したがって、応答時間に依存します。どのページが最初に追加されますか。

約束をreturn $.get(url+'.html')に返すことができます。

function addHtml(url) { 
    return $.get(url+'.html'); 
}; 

$("#button").click(function() { 
    addHtml('page1') 
    .then(function(result){ 
     $('.divtest').append(result); 
     return addHtml('page2'); 
    }) 
    .then(function(result){ 
     $('.divtest').append(result); 
     return addHtml('page3'); 
    }) 
    .then(function(result){ 
     $('.divtest').append(result); 
    }) 
}); 
+0

ありがとうございました。では、最初の応答が完了した後、どのように関数を2回目に呼び出すことができますか。何か方法はありますか? – Grcn

+0

私の答えを編集させて、より良い例を追加させてください。 –

+0

これは本当に良い例です。ありがとうございました。 – Grcn