我有一个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”})之后提醒文本时; 按预期正确命中函数。为什么会这样?任何人都可以为此提供解决方案吗?
答案 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);
}
});
}
});
});