我正在进行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调用并使其返回成功,而不是中止?
答案 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: ...
});
所以每次都不打电话给服务器。