【问题标题】:How can I pass a parameter to the callback of a jQuery ajax request?如何将参数传递给 jQuery ajax 请求的回调?
【发布时间】:2010-07-05 22:14:11
【问题描述】:

我需要将额外的变量传递给 jQuery、ajax 回调函数。

例如,给定:

while (K--)
{
    $.get
    (
        "BaseURL" + K,
        function (zData, K) {ProcessData (zData, K); }
    );
}

function ProcessData (zData, K)
{
    console.log (K);
}

ProcessData() 每次都会报告 0(或者无论 K 的最后一个值是什么)。

如何确保ProcessData() 触发或可以获得正确的 K 值?

有什么方法可以在不将$get() 包装在函数中的情况下做到这一点?

【问题讨论】:

  • 稍等片刻,你为什么要做这么多请求,这个变量是干什么用的?您是否在跟踪最后一个请求何时完成?
  • @Nick Craver:我做了很多请求,因为我需要从给定类型的几个页面中抓取选择信息。 K,在这种情况下是跟踪页面顺序,以便可以对结果进行排序(异步请求并不总是按顺序返回)。可能还有其他变量。 ;-)
  • 最好在服务器端做这个,一个请求返回...这将是一个更好的用户体验,特别是对于高延迟客户端,你看不到发展时的影响。
  • @Nick Craver:啊,但你认为我可以控制有问题的服务器,但我没有。这是一种来自不同来源的“混搭”应用程序,没有API。此外,您提出了一种“海龟一路向下”的方法。有些东西必须在用户等待时查询所有这些页面。在这种情况下,重复请求很少见,因此服务器端缓存几乎没有用处,而客户端浏览器缓存可以很好地加快速度。最后,我必须设置一个网络应用程序而不是一个简单的扩展程序。对我来说不划算。

标签: javascript jquery ajax callback closures


【解决方案1】:

没有。由于闭包的工作方式,所有内部函数都将关闭相同的 K 变量(最终等于 0)。您需要在某处增加一个间接级别来创建单独的范围。例如:

while (K--)
{
    (function(K)
    {
      $.get
      (
          "BaseURL" + K,
          function (zData, status) {ProcessData (zData, K); }
      );
    })(K);
}

另外,success 函数的第二个参数不应该被称为 K。该参数将获取状态,然后将隐藏所需的 K。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2011-02-02
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多