0

私は2つの異なるfunction()メッセージと非表示の読み込みメッセージを1つ持っています。

function functionOne(){
   $.get(baseURL + 'xml/', function(one) {
      ...
   });
}

function functionTwo(){
   $.get(baseURL + 'xml/', function(one) {
      ...
   });
}

function hideLoading(){
   $('#loading').fadeOut('slow', function() {
      $('#loading').hide();
   });  
}

今、私がやろうとしているのは、それらを1つずつロードすることです。だから私はロードされた後とロードされたfunctionTwo後に呼び出したいです。このコードは、ロード前のメッセージを非表示にしてロードされるため、機能しません。functionOnehideLoadingfunctionTwofunctionOnefunctionTwo

$('.featuredImage').live('click', function()  {
   functionOne();
   functionTwo();
   hideLoading();
});

誰かがこれを手伝ってくれる?

4

3 に答える 3

2

コールバックの最後に次の関数を追加します

function functionOne(){
   $.get(baseURL + 'xml/', function(one) {
      ...
     functionTwo();
   });
}
于 2013-03-02T09:10:32.350 に答える
2

これは、Ajaxが非同期であるため、Ajaxのコールバック関数内で関数を呼び出す必要があるためです。また、liveメソッドは非推奨であることに注意してくださいon。代わりにメソッドを使用できます。

$(document).on('click', '.featuredImage', functionOne);

function functionOne(){
   $.get(baseURL + 'xml/', function(one) {
      functionTwo();
   });
}

function functionTwo(){
   $.get(baseURL + 'xml/', function(one) {
      hideLoading();
   });
}
于 2013-03-02T09:11:36.037 に答える
1

$.get()Promise 準拠の jqXHR オブジェクトを返します。

functionOne()とから jqXHR を返すと、次のようにチェーンfunctionTwo()を形成できます。.then()

function functionOne(){
   return $.get(baseURL + 'xml/');//returns a jqXHR object
}

function functionTwo(){
   return $.get(baseURL + 'xml/');//returns a jqXHR object
}

function hideLoading() {
   $('#loading').fadeOut('slow');  
}

$(document).on('click', '.featuredImage', function() {
   functionOne().then(functionTwo).then(hideLoading);
});

このようにすることで、次に何が起こるべきかについての仮定が維持functionOne()され、自由になります。functionTwo()すべてのシーケンス ロジックは、呼び出し元の関数にあります。

コールバックを式に再挿入できます$.get()。キャッチされないエラーがスローされない限り、シーケンスは抑制されません。

于 2013-03-02T10:39:05.297 に答える