1

Jqueryでajaxを使用して2つの異なるURLにデータを送信しようとしています
。次のように考えることができます。

$.ajax({ 
type: 'POST' 
url: 'some_url1' 
data: 'some data'  
success: function(data){  
$.ajax ({  
type: 'POST'  
url: 'some_url2' 
data: 'some data' 
success: function(data){}
}) 
}  
}) 

それを行う他の方法はありますか?
どうも

4

4 に答える 4

5

次のようなコードがある場合:

$.ajax({ 
  type: 'POST',
  url: 'some_url1',
  data: 'some data', 
  success: function(data){  
    $.ajax ({  
      type: 'POST',
      url: 'some_url2',
      data: 'some data',
      success: function(data){}
    });
  }
});

最初に飛びつくのは、重複の量です。基本的に、ほぼ同一のコード ブロックが 2 つあります。複製する必要がある非常に正当な理由がない限り (たとえば、2 つのコード ブロックが 2 人の異なるビジネス オーナー/ロールに責任があり、互いに独立して変更される可能性が非常に高い場合)、複製されたコードを単一の関数に抽象化します。 .

この場合、複製された 2 つのコード ブロックの違いは 2 つだけです。

  1. URL
  2. 成功のコールバック

したがって、複製されたコードから抽出した関数は、次の 2 つをパラメーターとして受け入れる必要があります。

var makeAjaxCall = function (url, success_callback) {
  $.ajax ({  
    type: 'POST',  
    url: url,
    data: 'some data',
    success: success_callback
  });
};

次に、例は次のように関数を呼び出します。

makeAjaxCall(
  'some_url1',
  makeAjaxCall(
    'some_url2',
    function() {}
  )
);

あなたの例ではdata、コールバック関数にパラメーターを渡していますが、使用していないことに注意してください。これは質問の目的のための最小限の不自然な例であり、実際にはそのパラメーターを使用していますか? その場合、抽出された関数もそれを処理する必要があります。しかし、そうする前に、あなたの例はこの点で混乱を招き、予期しない (または少なくとも直感的ではない) 方法で動作する可能性があるため、もう少し明示的にする必要があります。内部 AJAX 成功コールバックがそのパラメーターを受け取るとき、dataそれを内部 AJAX 呼び出しの結果にしたいですか? dataそれとも、内部の AJAX 呼び出しを含む関数に渡されたパラメーターにしたいですか? コードでは意図が不明です。

于 2012-09-30T00:51:55.270 に答える
0

見た目はこんな感じです..

$(function() {
     // Make the first ajax call with Parameters
     ajaxCall('firsturl' , firstdata , callbackFunction1 );

});

function callbackFunction1(result) {
    // Make the econd ajax call from the callback function1
     ajaxCall('secondurl' , seconddata , callbackFunction2 ); 
};

 function callbackFunction2(result) {
    // Success call back of second ajax request     
}; 

function ajaxCall(url, usrData, callbackFunction) {
    $.ajax({
        type: 'POST'
        url: url,
        data: usrData,
        success: callbackFunction
    });
};
于 2012-09-30T00:57:49.797 に答える
0

パラメーターに送信先の URL を持つ関数を記述し、その関数を 2 回呼び出すだけで、毎回別の URL を使用して、二重のコードを記述する代わりに...

于 2012-09-30T00:31:43.823 に答える