0

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

更新函数(ajax):

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

进程.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 调用并返回成功,而不是中止它?

4

2 回答 2

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 秒检查一次新消息

于 2012-12-04T11:37:47.890 回答
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: ...
});

所以每次都不要调用服务器。

于 2012-12-04T11:50:51.873 回答