![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
当方、Javascriptで本格的なプログラムを組んだことが無いプログラマです。
書籍を参考にAJAXを使用したインターフェースを構築しているのですが、時折タイムアウトエラーが止まらず出続ける現象に遭遇して困っております。
原因・回避方法などがわかりましたらご教授ください。
httpRequestのアクセス部分のソースは以下のようになっています(見づらくてすみません)。
function httpPostRequest(target_url, post_data, funcitonReference) {
~~(XMLHttpRequestオブジェクト検証部分)~~
timerId = setInterval('timeoutCheck()', 1000);
httpObj.open("POST", target_url, true);
httpObj.onreadystatechange = function() {
if (httpObj.readyState == 4) {
clearInterval(timerId);
if (httpObj.status == 200) {
funcitonReference(httpObj.responseText);
} else {
alert(httpObj.status + ' : ' + httpObj.statusText);
funcitonReference(false);
}
}
}
httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpObj.send(post_data);
}
function httpObjGenerateFail() {
alert('This browser is outside the support.');
return false;
}
function timeoutCheck() {
timeout_sec --;
if(timeout_sec <= 0) {
clearInterval(timerId);
timeout_sec = 10;
httpObj.abort();
alert('Time out');
return false;
}
}
No.1ベストアンサー
- 回答日時:
予想ですが、
timeoutCheck()
のイベント来る前に、
再度 httpPostRequest()が呼ばれた場合、
>> timerId = setInterval('timeoutCheck()', 1000);
で、新規で timerId 発版するので前回の timerId が解放されずに残ってしまったのかと、。
なので、解決策としては、
>> timerId = setInterval('timeoutCheck()', 1000);
する前に、timerIdが残ってないか判定して、残っていたら、
>> clearInterval(timerId);
する処理を追加すればいいかと思われます。
この回答への補足
回答ありがとうございます。
非同期であるがゆえに起こる問題ということですね。
参考にした書籍の著者はこの問題に気づいてないのですかね・・・。
ちなみに、timerIDの残っているかどうかの判定というのは
if(timerID)
で判断できるのでしょうか。
(すみません。月曜まで実行環境がないので・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
関数でy=g(x)のgとは何の略です...
-
functionから別のfunctionを実...
-
XMLHttpRequestでキャッシュを...
-
ActiveXobjectが作成できない
-
二次元配列を使って順位をだす...
-
乗換案内 VBAで操作したい
-
javascriptの基本的なことだと...
-
window.openでタイトル名の指定
-
Boolean型配列中のTrueの有無を...
-
JavaScriptで、現在日時から100...
-
同じIDで定義した要素の配列を...
-
Googleスプレッドシートとスク...
-
DOM要素を削除しても、イベント...
-
【Tabキー】特定の範囲内だけで...
-
Javascriptで定期的にF5を押す...
-
<a>タグのテキストを取得
-
Click回数を数え、規定された回...
-
『名前空間』の意味を教えてく...
-
JavaScriptでの動的な多次元配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jslintのエラーについて質問
-
要素名がスペースを含む場合のj...
-
javascript(jQuery)でセル内...
-
ajax反映後のjqueryが動かない
-
jQueryの :not() .not() が有効...
-
getElementByIdを使用したグロ...
-
コードをスマートにさせたい。
-
クリックすると上に開くアコー...
-
jQueryの"return false"の役割...
-
jQueryが読み込めない
-
個別では動く、javascriptのエラー
-
一つのアクションで関数を二つ...
-
jqueryの変数を関数の外に出す方法
-
R言語
-
jQuery|:not(:animated)
-
即時関数でプライベート変数的...
-
スムーズに動く アニメーション...
おすすめ情報