11

別のサーバー上のphpファイルから提供されるコンテンツを含めるためにjavascriptを使用しています。ただし、この他のサービスは不安定になることがあり、読み込みに時間がかかるか、まったく読み込まれません。

失敗して「再試行してください」というメッセージを表示する前に、JS で x 秒間外部データを取得しようとする方法はありますか?

<script type="text/javascript" src="htp://otherserver.com/myscript.php"></script>
4

4 に答える 4

3

いくつかの問題:(別名ajax)でタイムアウトしきい値を使用できますXMLHttpRequestが、それがオンになっているため、同一生成元ポリシーの制限otherserver.comのために使用できませんXMLHttpRequest(すべてのAグレードブラウザーをサポートします)。

スクリプトが任意の種類のグローバル名(変数名、関数名など)を導入している場合は、次のことsetTimeoutを確認し続けることができます。

var TIMELIMIT = 5; // seconds until timeout
var start = new Date;

setTimeout(function() {
  // check for something introduced by your external script.
  // A variable, namespace or function name here is adequate:
  var scriptIncluded = 'otherServerVariable' in window;

  if(!scriptIncluded) {
    if ((new Date - start) / 1000 >= TIMELIMIT) {
      // timed out
      alert("Please try again")
    }
    else {
      // keep waiting...
      setTimeout(arguments.callee, 100)
    }
  }
}, 100)

私が見ているように、問題はスクリプトのリクエストをキャンセルできないことです。私が間違っている場合は誰かが私を訂正してください。ただし<script>、DOMからを削除しても、リソースに対するブラウザの要求はアクティブなままになります。そのため、スクリプトの読み込みにx秒以上かかっていることは検出できますが、リクエストをキャンセルすることはできません。

運が悪いかもしれないと思います。

于 2010-01-07T15:22:04.600 に答える
2

これを行う唯一の方法は、データを取得する別の(PHP 対応の) サーバー上にプロキシを作成することですが、特定のタイムアウト制限に達すると停止します (そして、空の結果を返すことができます)。 )。

于 2010-01-07T15:36:18.847 に答える
-1

これを行う唯一の方法は、ajaxを介してファイルのコンテンツを取得し、タイマーを設定することだと思います。リクエストがタイマーの前に終了した場合は、evalを使用して応答を評価できます(とにかくそれはより良い解決策ではありません)。そうでない場合は、ajaxリクエストを停止してエラーメッセージを書き込むことができます。

于 2010-01-07T15:19:57.257 に答える