次の処理で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」となって事象が発生しません。
ご意見、ご指摘をいただければ幸いです。よろしくお願いいたします。
実際のサイトが分からないと何とも、という感じですが、抜け落ちた「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
たぶん処理の記述には論理的には問題がなくて、ブラウザ側の問題では?
例えば、客先が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件)