0

次のように、前の変更メソッドの呼び出しを終了した後に、change() メソッドを呼び出したいです。

$('#editMPS_structure .alcanceMarca').find('.marca').val(enlaceMarca).change();
$('#editMPS_structure .alcanceProducto').find('.producto').change();


$('.marca').on('change', function() {
    $.ajax({ //ajax call to populate .producto select according a value of marca })
})

$('.producto').on('change', function() {
    $.ajax({ //ajax call})
})

しかし問題は、最初の change() メソッドを終了せずに .alcanceProducto の 2 番目の change() メソッドを呼び出すことです。

最初の ajax change() 内に change() への 2 番目の呼び出しを入れたくありませんが、それを行う別のメソッドまたは関数が存在すると思います。

4

4 に答える 4

1

オプションはほとんどありません (要件とコードの複雑さによって異なります)。最初のより素朴な:

  • 最初のリクエストが完了するまで、次のコード行は実行されません (ただし、ページも更新されません) asyncfalseajax()
  • 最初の呼び出しのコールバック (または jQuery ヘルパー メソッドの 1 つ) 内に 2 番目の呼び出しを配置し​​ましょう (したがって、最初の呼び出しが終了したときに実行されます)。
  • jQueryの機能を使用してみましょうwhen(手動で記述できるリクエスト チェーンを模倣します)。

コード パスがそれほど直線的でない場合や、よりトリッキーな状況 (ユーザー アクションによって複数の要求が開始される場合など) を処理する必要がある場合は、独自のリストを作成する必要があります。

on('change')ハンドラはリクエストを開始しませんが、FIFO に入れ、最初のエントリをポップして実行します。コールバック関数では、次のものがポップされます (複数のリクエストがキューに入れられている場合など)。実際の例については、このリンクから開始できます。

于 2013-07-16T15:59:45.447 に答える
0

最初に、次の方法で ajax 呼び出し用の関数を作成します。

function ajax1(endFunc){
    $.ajax({ //ajax call to populate .producto select according a value of marca })
    .done(function(){
       if(typeof endFunc === "function") 
            endFunc();
     });
}

function ajax2(){
     $.ajax({ //ajax call})
}

次に、次のように記述します。

ajax1(ajax2);

それ以外の :

('#editMPS_structure .alcanceMarca').find('.marca').val(enlaceMarca).change();
$('#editMPS_structure .alcanceProducto').find('.producto').change();

新しい関数を onchanges にリンクすることを忘れないでください:

$('.marca').on('change', ajax1);
$('.producto').on('change', ajax2);

それが私の解決策になります。残念ながら、今はテストできませんが、うまくいくはずです。お知らせ下さい !

于 2013-07-16T15:59:58.637 に答える
-1

change最初の ajax 呼び出しの応答が完了するまで、.producto でイベントの設定を保持します。

$('.marca').on('change', function() {
    $.ajax({ //.... })
      .done(function() { 
        $('.producto').on('change', function() {
          $.ajax({ //ajax call})
于 2013-07-16T15:57:09.410 に答える