【问题标题】:Why does jQuery seem to be queuing my ajax requests?为什么 jQuery 似乎在排队我的 ajax 请求?
【发布时间】:2014-04-16 04:54:48
【问题描述】:

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

两者同时停止,考虑到第二个(发送消息)调用在另一个脚本未运行时根本不需要时间来执行,这让我相信我的发送消息脚本正在等待我的轮询循环完成。以下是我的 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=""; } );
}

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

【问题讨论】:

    标签: javascript php jquery ajax queue


    【解决方案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);
                }
        });
    }
    

    申请,

    缓存:真

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 2019-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        相关资源
        最近更新 更多