我需要通过 JQuery 的 getJSON
函数执行两次 AJAX 调用。
问题是,一旦执行其中一个调用,我需要立即调用第二个 getJSON 函数(因为我需要第一个调用的结果作为第二个调用中的参数)。
我的代码如下所示:
$.getJSON("/Traslados/ObtenerCedulas", { Param1: $("#Param1").val(), Param2: $("#Param2").val() }, function (j) {
$("#Result1").val(j);
$.getJSON("/Traslados/ObtenerLogins", { Param3: $("#Param3").val(), Param4: $("#Result1").val() },
function (k) {
alert(k);
$("#Result2").val(k);
});
});
问题是,虽然第二个调用正确执行并给出了预期结果(我使用 Firebug 的控制台调试了它),但它不会触发警报,更糟糕的是,它没有设置 k
值添加到我的 Result2
输入字段。
发生了什么事?
最佳答案
我在这里看到的一个问题是,无论第一个调用成功还是失败,您的第二个 getJSON 调用都会发生,并且从您发布的代码中无法知道 #Result1 是否实际上设置正确。
如果您查看 getJSON API 文档: http://api.jquery.com/jQuery.getJSON/ 它将向您展示如何构建第一个 getJSON,以便您进行一些完成/失败/始终类型的响应处理。
如果没记错的话,这并不是你的全部问题。过去,当我需要执行必须按顺序发生的 ajax 调用时,我会使用对调用进行排队和出队。
排队的简单示例
<html>
<header>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
<script>
function fakey_not_ajax(message, callback) {
alert (message);
callback();
}
function queue_my_stuff( kick_it_off_callback ) {
$(document).queue("mydemo_queue", function(){
fakey_not_ajax("show me first", function() {
$(document).dequeue("mydemo_queue");
});
});
$(document).queue("mydemo_queue", function(){
fakey_not_ajax("show me second", function() {
$(document).dequeue("mydemo_queue");
});
});
kick_it_off_callback();
}
function push_the_button() {
alert ("pushed");
queue_my_stuff(
function(){
$(document).dequeue("mydemo_queue");
}
);
}
</script>
</header>
<body>
Try this
<a href="#" onclick="push_the_button();">Push Me</a>
</body>
</html>
关于JQuery getJSon 嵌套调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748574/