2

最後はこれで…

私が抱えている問題は、ほぼ同時に (リクエストから約 60 ~ 70 分)、ajax リクエストに対して成功関数が呼び出されることですが、Tomcat ログはリクエストがまだ実行中であることを証明しています。

(観点:リクエストは空の文字列( "")または(エラーの)htmlページを返すことになっていますが、成功関数が呼び出されると、長さ2の文字列が返されます結果= " "(2つの空白文字)

これをクロムで再現することはできません.IEのみです(IEの特異性に対応しているため、これは問題です)

リクエストが送信されたときに複数のポーリングが実行されているため(jQueryプログレスバー情報を更新するため)、最初はjQueryの問題でしたが

でも...

毎秒 3 時間ループしてログに出力する Java メソッドを呼び出す 1 つの非同期 ajax リクエスト (jQuery ではない) でこれをテストすると、常に 3600 秒マーク付近で成功を呼び出します (さらに 7200 秒残っています)。

コード例:

var http_request = false;
  if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/text');
    }
  }
  else if (window.ActiveXObject) {
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (e) {}
    }
  }
  if (!http_request) {
    alert('Giving up: Cannot create an XMLHTTP instance');
    return false;
  }
  url += "&random=" + Math.random();
  http_request.open('GET', url, true);
  http_request.onprogress = function () { };
  http_request.ontimeout = function () { };
  http_request.onerror = function () { }; 
  http_request.onreadystatechange = function(){
    if (http_request.readyState == 4) {
      if (http_request.status == 200) {
        result = http_request.responseText;
        alert("success: ("+result.length+") ["+result+"]");             
      }
    }   
  }; 

注:これはタイムアウトエラーではありません(少なくともajaxエラーではありません)。ajaxタイムアウトオプションは正しく機能し、それに応じてタイムアウトエラーを返すように見えますが、前述したように、タイムアウトエラーではありません...成功関数の呼び出しが早すぎます。

誰かが助けてくれることを願っています:)

乾杯、
スティーブ。

アップデート:

ネットワークタブをキャプチャしてリクエストを実行しましたが、結果が中止されたことを示しています: here

ありがとう@ArunPJohny、これは私に新しい方向性を与えてくれました。ある種の「onAbort」ajaxコールバックはありますか? 私が思っていたように、この種の応答は「エラー:」コールバックによってキャッチされます。

更新 2:

それ以来、多くのSOトピックへの道を見つけました。特に、xmlhttprequest timeout / abort not working as expected?

Tim は、アボートをキャッチするための便利なリンクをいくつか提供していますが、アボートの理由についてはまだ手がかりがありません。

続き:こちら

4

0 に答える 0