【问题标题】:How to pass additional parameter to jquery $.(post) callback function?如何将附加参数传递给 jquery $.(post) 回调函数?
【发布时间】:2020-05-30 15:36:46
【问题描述】:

我正在编写这段代码,我使用循环发送一系列异步发布请求。当调用与发布请求相关的回调时,我想使用由于 javascript 范围规则而无法直接使用的循环变量。代码是这样的:

for(i=0;i<10;i++)
{
$.post(url,requestData,function(data,status,xhr){
// use variable i
}

由于与 javascript 中的回调相关的范围规则,我无法直接使用 i。所以我想将 'i' 作为参数传递给回调,但文档说只能有 3 个与此回调关联的参数。有没有办法传递额外的参数?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果i 是块作用域,您可以在回调中使用变量i。用 let 关键字声明 i

    for(let i=0;i<10;i++)
    {
       $.post(url,requestData,function(data,status,xhr){
          // use variable i
       }
    }
    

    这是一个演示

    const $ = {
      post: function(callback) {
        setTimeout(() => callback(123, 'OK', null), 1000);
      }
    }
    
    for(let i=0;i<5;i++)
    {
         $.post(function(data,status,xhr) {
             // use variable i
           console.log(i);
         })
    }

    【讨论】:

      【解决方案2】:

      我在这里使用 setTimeout 来演示异步任务(例如您的 $.post 事件)。

      for (i=0; i<10; i++) {
        setTimeout(() => {
          console.log(i);
        }, 1000);
      }

      i 在您运行 console.log 之前已更改。

      相反,您必须在适当的数字处保留i 值的副本。

      for (i=0; i<10; i++) {
        const idx = i;
        setTimeout(() => {
          console.log(idx);
        }, 1000);
      }

      【讨论】:

        猜你喜欢
        • 2011-06-29
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        相关资源
        最近更新 更多