在jQuery函数中调用两个服务器端函数时出现问题

时间:2011-07-06 05:34:43

标签: jquery asp.net-mvc-2

我有一个jquery,它使用post和next使用getJSON()进行第一次服务器函数调用。 jQuery函数如下所示。

$("#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 :(得分:0)

  

为什么会这样?

因为AJAX是异步的。两个请求几乎在相同的时间触发,并且它们到达您的服务器的时间未确定。

如果您希望它们按顺序执行,您需要在第一个请求的成功回调中触发第二个请求:

$('#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);
                }
            });
        }
    });
});