【至急】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」となって事象が発生しません。
ご意見、ご指摘をいただければ幸いです。よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2018/04/02 23:57:44
  • 終了:2018/04/10 00:00:04

回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4678ベストアンサー獲得回数19932018/04/03 01:01:28

ポイント100pt

実際のサイトが分からないと何とも、という感じですが、抜け落ちた「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

id:kaoato No.2

kaoato回答回数131ベストアンサー獲得回数552018/04/06 17:08:26

ポイント100pt

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

例えば、客先が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);が、実行されてないのと同じになるかも。

コメントはまだありません

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません