5

サーバーからの応答を望まないときにAJAX呼び出しを行う適切な方法はありますか?サーバーにデータを保存させたいのですが、クライアントは応答を必要としません。サーバーが応答しない場合、AJAX接続は開いたままになり、タイムアウトになるまで応答を待ちますか?

私は次のようなJavascriptを使用します。xmlhttp.onreadystatechangeイベントを省略したことを除けば、これは典型的なAJAX呼び出しです。

function SaveLabel()
{
    var xmlhttp = null;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert('Your browser does not support this feature.');
        return;
    }

    xmlhttp.open('GET', 'mypage.aspx?label=1');
    xmlhttp.send(null);
}

私は同様の質問を見つけましたが、それは実際には私の答えではありません:Ajax接続はある時点で切断されますか?

4

2 に答える 2

6

サーバーからの応答を期待するかどうかに関係なく、サーバーが接続を完了するまで接続を開いたままにしておく必要があります。

その理由は、スクリプトの実行が完了する前にクライアントが切断すると、ほとんどのWebサーバーがリクエストを強制終了するためです。

サーバーは、リターンデータのように「応答」する必要はなく、単に「リターン」する必要があります。

つまり、「Ajax接続はある時点で切断されますか?」という質問への回答:はい、サーバーが接続を終了したとき。

したがって、実行する必要があるのは、ASP(X)スクリプトが作業を終了したらすぐに終了することを確認することです。永久に実行させたり、長時間の処理が必要なヘルパーデーモン/サービスなどにデータを渡したりしないでください。

于 2012-05-22T05:10:28.983 に答える
2

xmlhttp.onreadystatechange状態の変化をリッスンするリスナーをアタッチする XHR オブジェクトの単なるイベントです。これは、ページにボタンを配置してonclickハンドラーを追加することと同義です。

ハンドラーの有無にかかわらず同じことを行います (AJAX は引き続き呼び出し、ボタンはクリック可能です)。唯一の違いは、何が起こったのかわからないことです (AJAX が成功したか失敗したか、ボタンがいつクリックされたかがわからない)。

于 2012-05-22T05:20:10.820 に答える