为什么jQuery似乎在排队我的ajax请求?

时间:2014-04-16 04:54:48

标签: javascript php jquery ajax queue

我正在尝试使用jQuery的长轮询在我的PHP站点中实现一个消息传递系统。但是,每当我在侦听新消息时尝试发送消息时,它似乎都在等待它在执行发送消息脚本之前完成侦听,从而导致Firebug控制台类似于以下内容:

Firebug loading

两者同时停止,考虑到第二个(发送消息)调用字面上没有时间执行其他脚本没有运行时,让我相信我的发送消息脚本正在等待我的轮询循环完成。以下是我的PHP(出于安全目的而删除了一些非基本代码)和JavaScript,用于长轮询。我发布消息发送,但它只是在数据库中插入一个值。

长轮询

$ml = message_len($id); //Gets number of messages
$start_length   = $ml;
$current_length = $ml;
$timeout = 0;

while( $current_length <= $start_length )
{
    sleep(1);
    clearstatcache();
    $current_length = message_len($id);
    $timeout++;
    if($timeout>29)
    {
        echo $current_length;
        exit;
        break;
    }
}

$info = getInfo(); //Gets message array
echo $info;

JavaScript的:

function message_listen()
{
     ajaxListener = $.ajax({
        type: "GET",
        url: "/scripts/php/method/exchange/listen.php", 
        data: { "id" : offerid },
        cache: false,
        success:
            function(data)
            { 
                    /* Do something with the data */

                setTimeout("message_listen()", 1000);
            }
    });
}

发送消息的ajax调用如下所示:

function message_send(message)
{
    //msgid is defined elsewhere
    $.get("/api/sendmsg.php", { "id" : msgid, "message" : message }, function(data) { document.getElementById("txtbx").value=""; } );
}

请注意,这些是被调用的两个单独文件。无论我尝试什么,文件都会同时执行并在相同的时间停止。我需要消息发送它自己的时间,让侦听器检测到,然后在发送新消息时返回消息。有没有这样的事情发生在其他人身上?任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

在您的代码中,

JavaScript的:

function message_listen()
{
     ajaxListener = $.ajax({
        type: "GET",
        url: "/scripts/php/method/exchange/listen.php", 
        data: { "id" : offerid },
        cache: false,
        success:
            function(data)
            { 
                    /* Do something with the data */

                setTimeout("message_listen()", 1000);
            }
    });
}

应用,

cache:true

答案 1 :(得分:0)