【问题标题】:Multiple Ajax HTTP GET Requests with Different Input Variables using jQuery使用 jQuery 的具有不同输入变量的多个 Ajax HTTP GET 请求
【发布时间】:2010-05-21 18:53:53
【问题描述】:

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

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。

谁能帮我解决这个问题?

【问题讨论】:

    标签: jquery ajax get http-request


    【解决方案1】:

    因为您的调用是异步的,所以在上述所有行都已运行之前,回调不会执行。这意味着 param 将在您的第一个 get 请求解析之前设置为值 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 的本地参数。

    【讨论】:

    • 是的,这行得通,谢谢。但我想在一个循环中处理数十个请求。我尝试循环执行它,但它不起作用。而且我希望所有请求都是异步的,这样我的程序就不会在每个响应时间挂断.. 其他想法?
    • 如果您提前知道要发出的所有请求,则数组是一个好主意。我用更灵活的解决方案编辑了我的答案。
    • 不错的解决方案,我有点生自己的气,因为我自己没有弄清楚它,而且我很高兴,因为我今晚可以睡觉了;)了解它的工作原理here
    • @Simen 在过去的一个小时里你是否也在考虑这个问题?我认为闭包可能会起作用,但直到我做了一个测试用例才确定。
    • 是的,我在为即将到来的考试阅读时,最终放弃阅读并专注于问题,直到找到解决方案。现在回到书本上!
    【解决方案2】:

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

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

    1. 您设置param = 1 并发送第一个ajax 请求
    2. 您设置param = 2 并发送第二个ajax 请求
    3. 第一次获取调用已完成。处理此调用的回调。您的 param 变量现在是 2
    4. 第二次获取调用已完成。处理此调用的回调。你的 param 变量仍然是 2

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

    【讨论】:

    • 谢谢,我现在明白发生了什么! Fletcher Moore 的解决方案正在工作,但我想在一个循环中制作我的所有请求,以便每个请求都是异步的,并且每个请求都提供不同的输出!这是否可行?我可以想象的一个解决方案是预先计算所有这些值并将它们存储在一个数组中,然后进行循环并使用相应的数组元素创建每个请求。还有其他建议吗?
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 2021-10-26
    • 2015-03-25
    • 2019-06-08
    • 2016-09-28
    • 2018-06-14
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多