【问题标题】:JQuery getJSon nested calls not workingJQuery getJSon嵌套调用不起作用
【发布时间】:2011-06-12 12:35:35
【问题描述】:

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

发生了什么事?

【问题讨论】:

    标签: jquery nested call getjson


    【解决方案1】:

    我在这里看到的一个问题是,无论第一次调用成功还是失败,您的第二次 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>
    

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 2012-11-19
      • 2017-12-03
      • 2013-05-17
      相关资源
      最近更新 更多