.ajax()调用不等待立即响应

时间:2010-10-13 17:40:41

标签: jquery

我不确定这是否可行,如果可能的话,我无法弄清楚如何实际做到这一点。

我想要做的是将一个复选框列表提交给.ajax()调用。该.ajax()调用将信息传递给PHP进行处理(在这种情况下,它将向所选的每个ID发送电子邮件)。

但是,我不希望页面(或该问题的.ajax()调用)等待PHP脚本完成运行。基本上我希望它传递数据并继续(并显示.dialog()框等等。)

这是诀窍:我想要从PHP脚本获得某种类型的反馈。完成后,我希望它将数据返回给用户,可能是通过在页面顶部显示一个栏(就像StackOverflow在你收到系统消息时所做的那样),无论你在哪里,它们都显示在页面顶部在网站上。)

第一部分,显示了一个显示的复选框列表。我在确定检查哪些数据并收集数据方面遥遥领先。现在我需要弄清楚如何将它传递给.ajax()调用,以便PHP可以使用它来扫描数据库以收集各种电子邮件并开始发送消息。不太确定如何传递数据。 创建一个由id1 = XXX& id2 = XXX& id3 = XXX-and_so_forth组成的dataString似乎很愚蠢。

我愿意接受建议。

[编辑]任何人对我上面提到的部分有任何建议吗?

3 个答案:

答案 0 :(得分:4)

Ajax请求的默认行为是它们是异步的,这意味着代码正常运行并且不等待AJAX​​调用的返回。

示例:

$.ajax({
    url: "...",
    data: "<checkboxes>",
    success: function(data, xhr, status) {
        // Code to add your banner when AJAX finished
    }
});

// Inline code to execute whitout wait the end of $.ajax

答案 1 :(得分:0)

你可以使用asyncronous ajax调用,无论你在ajax的成功方法中保留什么逻辑都可以移出。

MakeAjaxCall()不会在success方法中写任何内容。

在makeAjaxCall()之后写下你的所有逻辑,以便两者并行发生。

makeAjaxCall(),实例化该过程 doyourlogicInParallel()...这里

答案 2 :(得分:0)

 If you are making calls to a .php script with AJAX (xmlHttpReq) and use 
 flush, this will send data to your script HOWEVER it will not set the 
 xmlHttpReq.readyState to 4 -- which is a requirement to use the information 
 sent (Firefox does however allow you to use the responseText property with a
 readyState == 3 but IE will throw an error).

我在阅读flush() - http://www.php.net/manual/en/function.flush.php

时从PHP.net得到了这个

基本上这意味着你可以通过ajax调用启动一个进程并让它返回一些值,例如echo "hello";但是没有将readystate设置为4.所以如果你很聪明,你可以操纵你的来自PHP脚本的响应,例如在带有计时器的while循环中。