【问题标题】:Passing variables to $.ajax().done()将变量传递给 $.ajax().done()
【发布时间】:2012-04-21 00:00:25
【问题描述】:

我迷路了。如何将循环变量传递给 AJAX .done() 调用?

for (var i in obj) {
   $.ajax(/script/).done(function(data){ console.log(data); });
}

显然,如果我要执行 console.log(i+' '+data) i 将在每次迭代时返回对象 obj 中的最后一个键。文档让我失望。

【问题讨论】:

  • 我想我可以使用success,但据我所知,现在已弃用。

标签: jquery ajax loops promise scoping


【解决方案1】:

您可以在发送到 $.ajax() 的对象中创建一个自定义字段,当进行 promise 回调时,它将是 this 中的一个字段。

例如:

$.ajax( { url: "@987654321@", method: "POST", data: JSON.stringify( object ), custom: i // creating a custom field named "custom" } ).done( function(data, textStatus, jqXHR) { var index = this.custom; } );

【讨论】:

  • 5年过去了,我早就忘记了是什么引发了这个问题。 ;)
  • 我需要知道如何为最近的项目执行此操作。因此,当我弄清楚时,我也尝试将信息传递给其他说他们想要它的人......
  • 从 jquery ajax 异步执行的角度来看,这更好,它清楚地在回调及时执行时提供了预期的项目/对象引用。
【解决方案2】:

您可以使用闭包(通过自执行函数)为每次循环调用捕获i 的值,如下所示:

for (var i in obj) {
    (function(index) {
        // you can use the variable "index" here instead of i
        $.ajax(/script/).done(function(data){ console.log(data); });
    })(i);
}

【讨论】:

  • 闭包是我一直很难完全理解的一个概念。谢谢@jfriend00,我试试看!
  • 是的,这行得通。我什至可以做obj[index]。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多