【问题标题】:How to pass variable from ajax function to another ajax function?如何将变量从 ajax 函数传递给另一个 ajax 函数?
【发布时间】:2012-09-16 16:29:00
【问题描述】:

我想知道如何将值从 ajax 函数传递到另一个 ajax 我已经尝试过这段代码,但它不起作用。任何人都知道如何以正确的方式做到这一点?谢谢!

    $("#button").click(function(){
    var passedValue = '';
    $.ajax({
        url://
        type://
        success:function(data){
            if(typeof==="object"){
            for(var i=0;i<data.length;i++){
                passedValue = data[i]["passedThis"];
            }
        }
    }
    });
    $.ajax({
        data: { receivedPassed: passedValue;}
    });
});

【问题讨论】:

  • 我的想法是,ajax 调用默认运行asynchronously,这意味着它们将在调用的同时触发,而无需等待下一次调用。因此,passedValue 将为空。如果您将async:false; 添加到第一个ajax 调用中,它应该可以工作。
  • 但是,它会让你的网页看起来被锁定了。
  • 2 个问题。您的变量是在 click 函数内声明的,因此稍后需要时它会超出范围。此外,ajax 调用是异步的,因此第二个 ajax 调用将在变量准备好之前尝试读取它。
  • @LeeTaylor:只是一个小提示:它不会超出范围! JavaScript 具有函数作用域,变量在嵌套函数中仍然有效。
  • @qwzjk 啊,是的。由于制表符/大括号,我无法分辨。

标签: jquery


【解决方案1】:

这些请求是异步的,所以passedValue 在发送第二个请求时还没有准备好。您可能希望按顺序发送它们:

$("#button").click(function() {
    $.ajax({
        url: //
        type: //
        success: function(data) {
            var passedValue;

            if(typeof (?) === "object") {
                for(var i = 0; i < data.length; i++) {
                    passedValue = data[i]["passedThis"];
                }

                $.ajax({
                    data: { receivedPassed: passedValue }
                });
            }
        }
    });
});

此外,您每次通过该循环都会覆盖passedValue。你的意思是+=而不是=,还是使用数组,或者别的什么?

【讨论】:

  • @BrainedWashed:嗯,你的原始代码中有typeof === "object"。我认为您取出了实际变量?我添加了(?) 以使其更明显地表明它是一个占位符。
  • 我有一个疑问,如果我要制作类似于 $.ajax 的函数 receivedValue() 会怎样?我还能得到passedValue吗?
  • @BrainedWashed:是的——只要passedValue 在该范围内声明并且另一个回调也在同一范围内。
  • 这就是我的意思,我真的很难过,请帮助link :)
【解决方案2】:

使用.then() 链接AJAX 调用,并使用.pipe() 过滤从第一个调用到第二个调用的数据:

$("#button").click(function() {
    $.ajax({
      url: //
      type: //
    }).pipe(function (data) {
      var passedValue = [];
      for (var i = 0; i < data.length; i++) {
        passedValue[i] = data[i]["passedThis"];
      }
      return passedValue;
    }).then(function (receivedPassed) {
      $.ajax({
        data: { receivedPassed: passedValue }
      }
    }
});

另请注意,.success() 回调将在 jQuery 1.8 中被弃用:

弃用通知:jqXHR.success()jqXHR.error()jqXHR.complete() 回调将在 jQuery 1.8 中被弃用。

【讨论】:

  • 将弃用通知移到页面上方可能是个好主意 ?
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2011-06-04
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2014-04-02
  • 1970-01-01
相关资源
最近更新 更多