我需要通过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
输入字段的值。
发生了什么事?
答案 0 :(得分:0)
我可以看到一个问题就是你的第二次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>