人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【至急】XHRHttpRequestをonclickのイベントハンドラ内で送信した際の動作について
次の処理でonClickを連続して10回発動させると、サーバ側(server.php)にPOST['count']が「0,3,2,1,5,4,8,9」の順で到達することがあります。
■javascript
var count = 0;
function clickevent(id) {
var sendData = new FormData();
sendData.append('count', ++count);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'server.php', true);
xhr.onload = function(event) {
if (event.target.status == 200) {
}
};
xhr.send(sendData);
}
■html
<img src="img/CA.png" id="xxxx" name="img" onClick="clickevent()">

非同期通信のため、到達順序が保障されませんので、「0,3,2,1,5,4」までは想定内なのですが、
途中の「6,7」が欠落していることが質問です。処理的に誤りがあるのでしょうか?
本件は、お客様の環境のみで発生しており、個人のネットワーク環境では「0,1,2,3,4,5,6,7,8,9」となって事象が発生しません。
ご意見、ご指摘をいただければ幸いです。よろしくお願いいたします。

●質問者: cochoo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

実際のサイトが分からないと何とも、という感じですが、抜け落ちた「6,7」の応答がどうなってるかを確認した方が良いと思います。

xhr.onload = function(event) {
 if (event.target.status == 200) {
 ...
 } else {
 // ※ここ重要
 }
};

連続したリクエストをロボットとしてはじいているようなサイトもありますから、status と response を確認してみましょう。

(追記です)
いや、エラーのときとかがあるので、load じゃなくて loadend イベントを拾う方が良いかも。
https://developer.mozilla.org/ja/docs/Web/Events/loadend


2 ● kaoato
●100ポイント

たぶん処理の記述には論理的には問題がなくて、ブラウザ側の問題では?

例えば、客先がIE8ぐらいを使ってたら、以下のような仕様?に該当するかも

AJAXにて1つのサーバに対して複数のリクエストとを同時に実行するアプリケーションを作成しています。

IEの同時接続数(FEATURE_MAXCONNECTIONSPERSERVER)を超えてリクエストを発生させて、

同時実行している要求に対する応答が5分を超えると、待っていたリクエストはIEからリクエストが飛ばなくなります。


https://answers.microsoft.com/ja-jp/ie/forum/ie8-windows_7/ajax%E3%81%A7%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C/1edb7e13-2950-4d22-99f7-aca4333f6664?messageId=c1120c90-9478-4d71-9aae-868780053f87


短期間に連続クリックすると、一部のxhr.send(sendData);が、実行されてないのと同じになるかも。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ