【发布时间】:2014-05-15 22:12:15
【问题描述】:
我对 AJAX 还很陌生,但是正在从事一个需要 ajax 调用来验证特定值的项目,如果第一个返回预期值,则再进行另一个 ajax 调用。我正在尝试实现 .done/.fail 模型,但找不到阻止两个调用同时发生的方法,而不是在第一次调用完成并成功后。
以下代码将调用 ajaxCall 函数两次,但同时调用,而不是连续调用。我研究了大量代码,包括Nested AJAX Calls、jQuery getting rid of nested ajax functions 和$.when.done callback isn't working,但似乎没有一个适合我的确切情况,或者我只是不理解代码。无论哪种方式,我都无法找到解决方案,非常感谢任何帮助!
var xReturn = ajaxCall("1");
xReturn.done(function(msg){
console.log("callback "+msg+" successful");
// if successful, place second call
if(parseInt(msg)==1)
xReturn = ajaxCall("2");
});
function ajaxCall(mop){
return $.ajax({
url: "getItem.php",
type: "POST",
data: {code: '<?php echo $code; ?> ', op:mop}
});
}
似乎 promises 可能是要走的路,但我不知道如何在这种情况下使用它们。提前感谢您提供正确方向的任何指示。
更新:
我进行了一系列不同结果的测试。对于昨晚的最后一次测试,我在ajaxCall("2"); 之后直接放置了另一个console.log(msg); 每次生成的消息总是“1”,这让我相信电话没有正常进行。这个结果告诉我 xReturn.done(function(msg)... 只被调用一次,但我认为它会在每次 ajax 调用时被调用。
有了这些新信息,我今晚将进行额外的测试并报告。
谢谢
【问题讨论】:
-
“看起来 promises 可能是要走的路,但我不知道如何在这种情况下使用它们。” 但你已经在使用承诺。
xReturn是一个承诺。无论如何,你如何确定你的代码是并行运行的?看起来它应该连续运行。您传递给.done的回调仅在第一个 Ajax 完成后执行。 -
为什么不在这两种情况下都使用
.$.ajax并在第一个success中调用第二个ajax? -
这是一个演示,它显示了 Ajax 调用是按顺序执行的:jsfiddle.net/9fT2e/5.
-
感谢演示,我可以看到 ajax 调用是按顺序执行的。我稍微更新了小提琴,但希望看到第二次调用 xReturn.done(...) 函数作为 xReturn=ajaxCall(2); 的回调。如何确定第二次通话是否成功? jsfiddle.net/9fT2e/6
-
@Kristofer 见帖子。谢谢。
标签: javascript jquery ajax