jqueryの同期通信ajaxにタイムアウトを設定する方法。

jqueryを使用して、ajax通信を同期でするような作りになっている(ええ、初心者で非同期より同期の方が理解しやすかったもので、同期通信で作りこんでしまったんです・・非同期通信に切り替えるにはすでに遅すぎるほどロジックが出来上がっちゃっているんです・・自爆です)
ところがここにきていろいろと問題発生で、タイムアウトを設定したいのですが、以下のようなことってできないでしょうか?
ソケットの
open
connect
write
read
別々にタイムアウトの時間を設定して処理する方法がありませんでしょうか?
最悪でも、ソケットのコネクションのタイムアウト(これを短くしたい・・5秒程度に)を設定して、write(post)とreadの時間は長くしたいと考えているのですが、ajaxでこのような細かい制御ってできないでしょうか?
いろいろ調べたのですがXMLHTTPRequestのtimeoutって、一連の処理のタイムアウトっぽいので、接続タイムアウトの実相ができないのかなと思ったりしているのですが、間違えてますでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/05/16 19:15:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:snow0214 No.1

回答回数470ベストアンサー獲得回数116

ポイント100pt

途中でtimeoutプロパティ(ミリ秒)の値を逐次設定することで対応できます。

var handle = new XMLHttpRequest();
handle.timeout = 5000;   //5秒
handle.open("GET", "http://....", true);
handle.timeout = 1000;   //1秒
xhr.send(null);
id:kameoyaji_2

XMLHttpRequestを直接呼び出すとできるのはわかりました。

ただ、jqueryのajaxという条件付きなもので・・・。

2014/05/14 18:45:08
id:snow0214

ご承知のようにjQuery.ajaxのtimeoutプロパティに設定できますが、これはjQuery.ajax全体に対するプロパティですから、writeとreadは別々のajaxで通信する必要があります。

2014/05/14 19:05:24
  • id:sasada
    ajax風で同期通信でタイムアウトというと、すみません、これくらいしか考えつきません。
    全体のタイムアウトしか設定できませんね。
    >|
    $.ajax({
    timeout: 5000, //タイムアウト値(ミリ秒)
    type: "POST",
    url: "hogehoge.php",
    data: { "arg": 123 },
    async: false
    }).done(function(data, status, xhr) {
    // 通信成功時の処理
    }).fail(function(xhr, status, error) {
    // 通信失敗時の処理
    }).always(function(arg1, status, arg2) {
    // 通信完了時の処理
    });
    |<
    http://www.tohoho-web.com/js/jquery/ajax.htm
  • id:kameoyaji_2

    同期通信を使用して、socketのコネクションタイムアウトは、短く(ネットワークのエラーなので、5秒程度)し、POSTと応答を受け取るまでのタイムアウトの時間は長く(60秒程度)として、なるべくエラーを早く検出したいと考えているのですが、難しいですかね。

    もちろん、同期通信で、

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません