2011-07-06 14 views
0

私は、getJSON()を使ってpostとnextを使って最初のサーバ関数呼び出しを持つjqueryを持っています。 jQuery関数を以下に示します。jQuery関数で2つのサーバ側関数が呼び出されたときの問題

$("#move_up").live("click", function(e) { 
      var rqdInstnId = GetRequiredId(); 
      //alert(rqdInstnId); 
      $.post("/Instruction/MoveInstruction", { docId: DocId, instnId: rqdInstnId, action: "MoveUp" }); 
      //alert("moved"); 
      //$.ajaxSetup({ cache: false }); 
      $.getJSON(
      '/Instruction/InstructionTreeView', 
      { docId: DocId, instnId: InstnId }, 
      function(data) { 
       //alert(data); 
       $.ajaxSetup({ cache: false }); 
       $('.initialTree').html(data); 
       ExpandTree(); 
       PersistLayout(); 
       PersistSelection(rqdInstnId); 
      }); 

     }); 

ここでは奇妙な問題に直面しています。この関数を実行すると、サーバ側でInstructionTreeView関数が最初にヒットし(ブレークポイント)、主関数MoveInstructionだけがヒットします。しかし、$ .post( "/ Instruction/MoveInstruction"、{docId:DocId、instnId:rqdInstnId、action: "MoveUp"})の後のテキストに警告します。 関数が期待通りに正しくヒットします。なぜこれが起こるのですか?いずれか1つは、これを解決するために役立つことができますか?

答えて

0

どうしてですか?

AJAXは非同期です。両方の要求はほぼ同じ時刻に起動され、サーバーにヒットした時刻は不定です。

あなたがそれらを順番に実行したい場合は、最初の成功コールバックで第2の要求を発射する必要があります。

$('#move_up').live('click', function(e) { 
    var rqdInstnId = GetRequiredId(); 
    $.post(
     '/Instruction/MoveInstruction', 
     { docId: DocId, instnId: rqdInstnId, action: "MoveUp" }, 
     function(result) { 
      // The first POST request finished successfully 
      // => now trigger the second 
      $.getJSON(
       '/Instruction/InstructionTreeView', 
       { docId: DocId, instnId: InstnId }, 
       function(data) { 
        $.ajaxSetup({ cache: false }); 
        $('.initialTree').html(data); 
        ExpandTree(); 
        PersistLayout(); 
        PersistSelection(rqdInstnId); 
       } 
      }); 
     } 
    }); 
}); 
+0

おかげでたくさん。これは私の問題を解決しました。.. –

関連する問題