使用jQuery的多个Ajax HTTP GET请求具有不同的输入变量

时间:2010-05-21 18:53:54

标签: jquery ajax get http-request

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

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一旦准备就绪。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

因为您的调用是异步的,所以在所有上述行都已运行之前,回调不会执行。这意味着在第一个get请求结算之前,param将被设置为值2。

为变量创建唯一的名称,例如param1,param2,而不是仅重新分配参数。

编辑:

查看此代码:

    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的本地参数。

答案 1 :(得分:1)

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

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

  1. 您设置param = 1并发送第一个ajax请求
  2. 您设置param = 2并发送第二个ajax请求
  3. 首先接到电话结束。处理此调用的回调。您的param变量现在为2
  4. 第二次接听电话已经结束。处理此调用的回调。您的param变量仍为2
  5. 解决方案是为每个调用设置不同的变量或增加param并在第一个调用的回调函数中发送第二个ajax调用。