0

私はphp-ajaxチャットに取り組んでおり、「更新」と「送信」の2つの主要な方法を使用しています

更新機能 (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 呼び出しを完了して、中止せずに成功を返すにはどうすればよいですか?

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 秒にする必要があります。または、完全に行うと、$_SESSION['SENDNOW']==true をすばやく (500 ミリ秒ごとに) チェックし、新しいメッセージを 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 に答える