JQuery getJSon 嵌套调用不起作用

发布于 2024-10-12 21:00:41 字数 683 浏览 4 评论 0原文

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

发生什么事了?

I need to perform two AJAX calls through JQuery's getJSON function.

The thing is that, once one of the calls is performed I need to immediately call the second getJSON function (because I need the result of the first call as a parameter in the second call).

My code looks like this:

$.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);
       });
 });

The problem is, although the second call is being performed correctly and is given the expected result (I debugged this using Firebug's console), it doesn't trigger the alert and even worst, it doesnt set the k value to my Result2 input field.

What's happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

背叛残局 2024-10-19 21:00:41

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

One thing I can see as a problem here is that your second getJSON call is happening whether the first call succeeds or fails and from the code you've posted there's no way to know whether #Result1 was actually set correctly.

If you look at the getJSON API doc:
http://api.jquery.com/jQuery.getJSON/
It will show you how to structure your 1st getJSON so that you have some done/failure/always kinds of response handlings.

If memory serves, this is not your whole problem, though. When I've needed to do ajax calls that must happen in order, in the past, I've used queuing and dequeing my calls.

A quick example of queuing

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文