JQuery getJSon嵌套调用不起作用

时间:2011-01-20 14:53:28

标签: jquery nested call getjson

我需要通过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输入字段的值。

发生了什么事?

1 个答案:

答案 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>