完成ajax,然后重新开始

时间:2012-12-04 11:31:51

标签: php ajax chat call abort

我正在进行php-ajax聊天,我使用两种主要方法:“更新”和“发送”

更新功能(ajax):

$.ajax({
    type: 'POST',
    timeout: 9999999999999999,
    url: 'process.php',
    success: ...
});

Process.php:

function update(){
   if(new messages){
   echo new messages...
   }else{
   sleep(5);update(); again...
   }
}

发送功能(ajax):

$.ajax({
type: "POST",
url: "send.php",
success: function(){
update();}
})

我希望在发送新邮件时停止运行“更新”请求并立即重新启动,以便发件人立即看到他的邮件。我尝试过ajax.abort()但它仍然可以继续在服务器端执行调用。

如何完成ajax调用并使其返回成功,而不是中止?

2 个答案:

答案 0 :(得分:1)

在您的PHP代码中,您可以检查连接是否已中止 http://php.net/manual/en/function.connection-aborted.php

但如果你真的想要返回“成功”,我会在send.php中添加一些内容,如

$_SESSION['SENDNOW']=true;

然后在Process.php中我会检查

if(new messages || $_SESSION['SENDNOW']==true){
   $_SESSION['SENDNOW']=false;
}

也许您应该将超时时间设为1秒,以便更快地响应。或者,如果你做得很好,你可以快速检查(如每500毫秒)$ _SESSION ['SENDNOW'] == true,新邮件只需每5秒

答案 1 :(得分:0)

请试试这个:

首先,document.ready()函数将Ajax调用声明为变量,如下所示:

var ajaxCall = null;

将此代码放在顶部的AJAX函数中:

//AJAX request aborted
if ( typeof ajaxCall != 'undefined' ) {
     return false;
}

对于这样的AJAX调用:

ajaxCall = $.ajax({
    type: 'POST',
    timeout: 9999999999999999,
    url: 'process.php',
    success: ...
});

所以每次都不打电话给服务器。