3

我想发出异步获取请求,并根据我提供给每个请求的输入来获取不同的结果。这是我的代码:

param=1;
$.get('http://localhost/my_page_1.php', param, function(data) {
   alert("id = "+param);
   $('.resul   5.t').html(data);
});

param=2;
$.get('http://localhost/my_page_2.php', param, function(data) {
   alert("id = "+param);
   $('.result').html(data);
});

两个请求的结果都是:“id = 2”我希望结果是:“id = 1”表示第一个请求,“id = 2”表示第二个请求。

我想对一个 HTML 文件中的许多请求执行此操作,并在它们准备好后立即将结果集成到 HTML 中。

谁能帮我解决这个问题?

4

2 回答 2

3

因为您的调用是异步的,所以在上述所有行都已经运行之前,回调不会执行。这意味着在您的第一个获取请求解决之前,参数将设置为值 2。

为您的变量(如 param1、param2)创建唯一名称,而不仅仅是重新分配 param。

编辑:

看看这段代码:

    for (var i = 0 ; i < 3; i++) {
        param = i;
        $.get('http://www.google.com',genCallback(param));
        param = i+5;
    }

    function genCallback(param) {
        var cb = function (data) {
            alert(param);
        }
        return cb;
    }

老实说,我不确定它是如何工作的。您会注意到它以某种顺序提醒数字 0、1、2,即使我不断更改参数。我没有直接在get中创建匿名函数,而是根据参数创建了一个函数。我认为会发生一个闭包,cb其中包括执行时 genCallback 的本地参数。

于 2010-05-21T19:00:53.183 回答
1

当您调用 AJAX 函数时,该请求的回调处理与您的其余代码不同步。指定在请求完成时调用的函数在请求完成之前没有被调用。

这就是您的代码最常见的工作方式(由于 AJAX 的异步性质):

  1. 您设置param = 1并发送第一个 ajax 请求
  2. 您设置param = 2并发送第二个 ajax 请求
  3. 第一次接电话就结束了。处理此调用的回调。你的param变量现在是 2
  4. 第二次接听电话结束。处理此调用的回调。你的param变量还是 2

解决方案是为每个调用设置不同的变量,或者param在第一个调用的回调函数中增加并发送第二个 ajax 调用。

于 2010-05-21T19:04:38.120 回答