2012-02-10 5 views
0
$.ajax({ 
     url: "http://ajaxhttpheaders.appspot.com", 
     dataType: 'jsonp', 

     success: function(headers) { 
      language = headers['Accept-Language']; 
      alert(language); 
     }, 

     //it doesn't work 
     //timeout: 2000, 

     error: function() { 
      //wait for 2 sec.. 

      //and if there are no response, do something.. 
     } 
    }); 

私はtimeout: 2000オプションを見つけましたが、機能しません。jQuery AJAXの応答時間をチェックして何らかのアクションを取る必要があります

答えて

1

それは少しハックだが、これはトリックを行う必要があります。

var cancelled = false; 
var errorTimer; 
$.ajax({ 
    url: "http://ajaxhttpheaders.appspot.com", 
    dataType: 'jsonp', 

    success: function(headers) { 
     if (! cancelled) { 
      cancelled = true; // stop timeout code from running 
      language = headers['Accept-Language']; 
      alert(language); 
     } 
    }); 

}); 
var errorCode = function() { 
    if (!cancelled) { 
     cancelled = true; 
     alert('Took too long and now we ignore the response!'); 
    } 
}; 
setTimeout(errorCode, 2000); 
+0

ありがとうございました!今あなたの答えを適用しました。 – Deckard

+0

多くの否定的な答え! 「ええ、あなたはできません」というのは、とても有用な答えではなく、私が示したように、間違っています。 – Rophuine

0

タイムアウトを処理する方法はhereです。

成功した応答が得られるまで、異なる間隔で発生する可能性のあるイベントがあるかどうかはわかりません。

0

あなたのデータ型は、JSONPあり、それは明らかにhere

スクリプトを述べているとJSONPリクエストがタイムアウトによってキャンセルすることはできません。スクリプト は、タイムアウト期間後に到着しても実行されます。エラーがキャッチされ、 に扱うことができるよう

0

Quoting Docs:

Ajaxリクエストは、時間制限のある優れたユーザー体験を提供します。要求のタイムアウトは通常、 がデフォルトのままになっているか、または オプションで特定の要求に対してオーバーライドされるのではなく、$ .ajaxSetup() を使用してグローバルデフォルトとして設定されます。さらに

:Firefoxので

は3.0+のみ、スクリプトとJSONPはが タイムアウトによってキャンセルすることができない要求します。スクリプトは、タイムアウト の期間の後に到着しても実行されます。

関連する問題