2011-01-20 97 views
3

我需要通过JQuery的getJSON函数执行两个AJAX调用。JQuery getJSon嵌套调用不起作用

问题是,一旦执行了其中一个调用,我需要立即调用第二个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

我在这里可以看到的一个问题是,您的第二次getJSON调用正在发生,无论第一次调用成功还是失败,并且您发布的代码都无法知道#Result1是否实际设置正确。

如果你看的getJSON API文档: http://api.jquery.com/jQuery.getJSON/ 它会告诉你如何构建你的第一次的getJSON让你有一些做/失败/总种响应handlings的。

如果内存服务,这不是你的全部问题,但。当我需要做一些必须按顺序进行的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> 
的一个简单的例子