jqueryを使用して、ajax通信を同期でするような作りになっている(ええ、初心者で非同期より同期の方が理解しやすかったもので、同期通信で作りこんでしまったんです・・非同期通信に切り替えるにはすでに遅すぎるほどロジックが出来上がっちゃっているんです・・自爆です)
ところがここにきていろいろと問題発生で、タイムアウトを設定したいのですが、以下のようなことってできないでしょうか?
ソケットの
open
connect
write
read
別々にタイムアウトの時間を設定して処理する方法がありませんでしょうか?
最悪でも、ソケットのコネクションのタイムアウト(これを短くしたい・・5秒程度に)を設定して、write(post)とreadの時間は長くしたいと考えているのですが、ajaxでこのような細かい制御ってできないでしょうか?
いろいろ調べたのですがXMLHTTPRequestのtimeoutって、一連の処理のタイムアウトっぽいので、接続タイムアウトの実相ができないのかなと思ったりしているのですが、間違えてますでしょうか?
途中でtimeoutプロパティ(ミリ秒)の値を逐次設定することで対応できます。
var handle = new XMLHttpRequest(); handle.timeout = 5000; //5秒 handle.open("GET", "http://....", true); handle.timeout = 1000; //1秒 xhr.send(null);
全体のタイムアウトしか設定できませんね。
>|
$.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
同期通信を使用して、socketのコネクションタイムアウトは、短く(ネットワークのエラーなので、5秒程度)し、POSTと応答を受け取るまでのタイムアウトの時間は長く(60秒程度)として、なるべくエラーを早く検出したいと考えているのですが、難しいですかね。
もちろん、同期通信で、