2017-05-05 17 views
1

スクリプトの読み込みに時間がかかりすぎると、私のサイトの動作をテストしようとしています。私はホストファイルに何かを追加することによって404を返すように要求を完全にブロックする方法を知っていますが、要求を完全に完了させないように強制する方法はわかりません。AJAXコールをハングする方法

例、

127.0.0.1 translate.google.com # this blocks google translate from loading (404) 

代わりに、私はtranslate.google.com がx秒間を応答しないようにしたいと思います。

私は私のスクリプトをロードするためにrequirejsを使用してだと私はそのタイムアウトに気付いてることは、私はホストファイルを経由して、それをブロックしたときに、私はGoogleが、必要に応じて必要とされるように変換できるようにするモジュールを追加した404

とは異なる動作し、 、サイトは正しく動作します。スクリプトがタイムアウトすると、サイトは読み込まれません。

// http://stackoverflow.com/questions/14164610/requirejs-optional-dependency 

define("optional", [], { 
    load: function (moduleName, parentRequire, onload, config) { 
     var onLoadSuccess = function (moduleInstance) { 
      // Module successfully loaded, call the onload callback so that 
      // requirejs can work its internal magic. 
      onload(moduleInstance); 
     } 

     var onLoadFailure = function (err) { 
      // optional module failed to load. 
      var failedId = err.requireModules && err.requireModules[0]; 
      console.warn("Could not load optional module: " + failedId); 

      // Undefine the module to cleanup internal stuff in requireJS 
      requirejs.undef(failedId); 

      // Now define the module instance as a simple empty object 
      // (NOTE: you can return any other value you want here) 
      define(failedId, [], function() { return {}; }); 

      // Now require the module make sure that requireJS thinks 
      // that is it loaded. Since we've just defined it, requirejs 
      // will not attempt to download any more script files and 
      // will just call the onLoadSuccess handler immediately 
      parentRequire([failedId], onLoadSuccess); 
     } 

     parentRequire([moduleName], onLoadSuccess, onLoadFailure); 
    } 
}); 
+0

テストしようとしていることを詳しく説明できますか?あなたは 'onLoadSuccess'コールバックハンドラの' onload'メソッドの呼び出しを、 'setTimeout(()onload(moduleInstance)、4 * 1000)'のようなものを使って4秒遅れて遅らせることができます。 – alpeware

+0

スクリプトがタイムアウトしたときに何が起こるかをテストしようとしています。 404が返ってくると、正しく動作します。タイムアウトすると正しく動作しません。 – MPavlak

答えて

0

あなたが管理しているウェブサイトでテストする必要があります。最も簡単な解決策は、数秒待つ少しのスクリプトであなた自身のlocalhostを使うことです。アプリケーションがタイムアウトになるまでだけでスリープ状態に秒を増やし

<?php 
    sleep(30); 
    echo 'DONE'; 

:30秒間待つ

短いPHPの例は次のようになります。

Here is another solution in Node.js

UPDATE:

次のステップは、(あなたの質問のように)あなたのホストファイルでタイムアウトしたいURLをリダイレクトすることです:

127.0.0.1 translate.google.com 

実行ローカルApache server (127.0.0.1はlocalhostの標準です)、以下の.htaccessファイルをあなたのApacheルート(通常 "htdocs")に入れてください:

DirectoryIndex index.php 
RewriteEngine on 
RewriteRule ^(.*)$ index.php [QSA,L] 

次に、上記のPHPの例をルート(通常は "htdocs")のindex.phpというファイルに置きます。

ローカルサーバーがコールに応答し、タイムアウトまで応答時間を調整できます。

+0

技術的には、私はこれを行うことができました。しかし、私が外部のスクリプトをすべて自分のプロジェクトに移動して、応答に失敗した場合に何が起こるかをテストするのは嫌です。 – MPavlak

+0

アプリケーションがブラウザで実行されている限り、そうする必要はありません。ローカルホストファイルを調整して、目的の要求がローカルホスト(127.0.0.1)にリダイレクトされるようにすることができます。 – dcman

+0

私が提供していないスクリプトのローカルを指していると404が返されますが、それはハングしません。 – MPavlak

関連する問題