同期Ajax-Chromeには信頼できるイベントのタイムアウトがありますか?

クリストファー・レルケン

状況

XHR / Ajaxリクエストを実行した後、ブラウザで新しいタブクリックして開く必要がある状況があります

これを行うには、Ajaxリクエストを同期的実行して、信頼できるクリックイベントのコンテキストを維持するように設定します。これは、正常に機能します。

問題

ただし、最新のChromeバージョン(36)では、Ajax呼び出しに多少の遅れがあるとポップアップ警告が表示されます... Chromeがタブを開く代わりにポップアップ警告を表示するには、2秒の遅れで十分です。コード自体は機能しています。そのボタンを複数回クリックすると、リクエストに遅延が発生するまで常に機能します。次に、ポップアップ警告が表示されます...

質問

信頼できるイベントを引き続き利用できるようにするために終了する必要がある同期Ajaxリクエストに適用されるタイムアウトはありますか?

それを回避する方法はありますか?結局のところ、呼び出しはすでに同期されており、結果が到着するまで他のすべてをフリーズします。

ありがとう。

JSFiddleを更新します

更新:問題を示すためにJSFiddleを作成しました:http://jsfiddle.net/23JNw/9/

/**
* This method will give open the popup without a warning.
*/
function performSlowSyncronousRequest() {
    $.ajax({
     url: '/echo/html',
     data: {delay: 2}, //JSfiddle will delay the answer by 2 seconds
     success: function(){
         window.open('http://www.thirtykingdoms.com'); //this causes the popup warning in Chrome
     },
     async: false
    });
}
ライジングフィッシュ

これを修正する可能性があるのは、XHRリクエストが返される前に、信頼できるコンテキストにいる間に新しいタブを開くことです。Javascriptを介して開かれたブラウザタブとウィンドウは、親ウィンドウとの接続を維持し、相互に通信できます。

リンクがクリックされたときに新しいタブを開くと、XHR呼び出しの実行中に新しいウィンドウにロード画面を表示できます。このワークフローは、元の要求ほどクリーンではありませんが、ある程度考えれば実行可能なソリューションになります。以下のスクリプトは、window.setTimeout()を使用して非同期XHRリクエストをシミュレートする簡単な例です。

<html>
<body>
    <h4>
    Hello
    </h4>
    <a id="openWindow" href="">Make http call and open window.</a>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    <script>
        (function ($) {
            var newWindow = null,
                timeout = null;

          $(document).ready(function () {
            $('#openWindow').on('click', function (evt) {
                evt.preventDefault();

              newWindow = window.open('about:blank', 'tempWindow');
              $(newWindow.document).find('body').append('<div class="loading">Loading...</div>');

              timeout = window.setTimeout(function () {
                // simulates async XHR
                $(newWindow.document).find('.loading').remove();
                $(newWindow.document).find('body').append('Done loading, here\'s your data');

              }, 5000)

            });
          });

        }(jQuery));
    </script>
</body>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AWS-ラムダなしで非同期にイベントを受信する方法はありますか

分類Dev

AJAXタイムアウトで中止する必要がありますか?

分類Dev

ドメインイベントの信頼できる非同期処理

分類Dev

RXJSサブジェクトのサブスクライブ-アクションはプレーンオブジェクトである必要があります。非同期アクションにカスタムミドルウェアを使用する

分類Dev

非同期イメージのダウンロードにタイムアウトを設定できますか、それともNSURLSessionが必要ですか?

分類Dev

javascriptでプロトタイピングを使用すると、ajax呼び出しと非同期コードに悪影響がありますか?

分類Dev

1つのピアで生成されたデータを、信頼性の低いネットワークの他のすべてのピアと同期するフレームワークはありますか?

分類Dev

人気のあるJavaScriptランタイムが同期的に見える非同期スクリプトを処理できないのはなぜですか?

分類Dev

非同期タスクでstdinを読み取るときに、「注釈付きI / OのブロックはTokioランタイムのコンテキストから呼び出す必要があります」

分類Dev

AJAXが入力されたリストアイテムへのイベントのバインドに問題があります。フォームを開いて、リストアイテムの値に基づいてそのフィールドに入力できるようにしたい

分類Dev

AJAXを同期させる方法

分類Dev

別のajaxのbeforeSendイベントでajaxコールバックを非同期的に処理するにはどうすればよいですか?

分類Dev

最初にソフトウェアをインストールする必要がありますか、それとも新しいUbuntuインストールでドットファイルを同期する必要がありますか?

分類Dev

カスタムPython非同期イベントループを実装する方法をどのように学ぶことができますか?

分類Dev

pouchdbベースのシステムとのデータ同期クライアント側:「削除済み」フラグの回避策はありますか?

分類Dev

このエラーが発生します。アクションはプレーンオブジェクトである必要があります。非同期アクションにカスタムミドルウェアを使用する

分類Dev

AJAXは本当に非同期ですか?

分類Dev

Chrome Canaryが更新されないようにするにはどうすればよいですか-または-2つのChromeプロファイルを同じアカウントで同期するにはどうすればよいですか?

分類Dev

「アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」反応/ redux付き

分類Dev

Task <T>がタイムアウトで完了するのを非同期的に待機します

分類Dev

Pythonマルチプロセッシングでは、プロセスプールに非同期で渡されるさまざまな関数にさまざまなタイムアウトをどのように指定できますか?

分類Dev

Javaでイベントドライバーフレームワークを実装するには、どの同期プリミティブを使用する必要がありますか?

分類Dev

エンタープライズデバイスのみがGoogleドライブの同期またはファイルストリームから同期できるようにするにはどうすればよいですか

分類Dev

「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

分類Dev

stdinにboost :: asioの待機データがあるときに完了する非同期イベントをスケジュールしますか?

分類Dev

セッションがタイムアウトした後、AJAXでリダイレクトを処理するにはどうすればよいですか?

分類Dev

ajax呼び出しを同期する方法はありますか

分類Dev

ZeroMQに非同期のクライアントとサーバーを配置する方法はありますか?

分類Dev

nodejsが同期してディレクトリを作成するのは信頼できません

Related 関連記事

  1. 1

    AWS-ラムダなしで非同期にイベントを受信する方法はありますか

  2. 2

    AJAXタイムアウトで中止する必要がありますか?

  3. 3

    ドメインイベントの信頼できる非同期処理

  4. 4

    RXJSサブジェクトのサブスクライブ-アクションはプレーンオブジェクトである必要があります。非同期アクションにカスタムミドルウェアを使用する

  5. 5

    非同期イメージのダウンロードにタイムアウトを設定できますか、それともNSURLSessionが必要ですか?

  6. 6

    javascriptでプロトタイピングを使用すると、ajax呼び出しと非同期コードに悪影響がありますか?

  7. 7

    1つのピアで生成されたデータを、信頼性の低いネットワークの他のすべてのピアと同期するフレームワークはありますか?

  8. 8

    人気のあるJavaScriptランタイムが同期的に見える非同期スクリプトを処理できないのはなぜですか?

  9. 9

    非同期タスクでstdinを読み取るときに、「注釈付きI / OのブロックはTokioランタイムのコンテキストから呼び出す必要があります」

  10. 10

    AJAXが入力されたリストアイテムへのイベントのバインドに問題があります。フォームを開いて、リストアイテムの値に基づいてそのフィールドに入力できるようにしたい

  11. 11

    AJAXを同期させる方法

  12. 12

    別のajaxのbeforeSendイベントでajaxコールバックを非同期的に処理するにはどうすればよいですか?

  13. 13

    最初にソフトウェアをインストールする必要がありますか、それとも新しいUbuntuインストールでドットファイルを同期する必要がありますか?

  14. 14

    カスタムPython非同期イベントループを実装する方法をどのように学ぶことができますか?

  15. 15

    pouchdbベースのシステムとのデータ同期クライアント側:「削除済み」フラグの回避策はありますか?

  16. 16

    このエラーが発生します。アクションはプレーンオブジェクトである必要があります。非同期アクションにカスタムミドルウェアを使用する

  17. 17

    AJAXは本当に非同期ですか?

  18. 18

    Chrome Canaryが更新されないようにするにはどうすればよいですか-または-2つのChromeプロファイルを同じアカウントで同期するにはどうすればよいですか?

  19. 19

    「アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」反応/ redux付き

  20. 20

    Task <T>がタイムアウトで完了するのを非同期的に待機します

  21. 21

    Pythonマルチプロセッシングでは、プロセスプールに非同期で渡されるさまざまな関数にさまざまなタイムアウトをどのように指定できますか?

  22. 22

    Javaでイベントドライバーフレームワークを実装するには、どの同期プリミティブを使用する必要がありますか?

  23. 23

    エンタープライズデバイスのみがGoogleドライブの同期またはファイルストリームから同期できるようにするにはどうすればよいですか

  24. 24

    「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

  25. 25

    stdinにboost :: asioの待機データがあるときに完了する非同期イベントをスケジュールしますか?

  26. 26

    セッションがタイムアウトした後、AJAXでリダイレクトを処理するにはどうすればよいですか?

  27. 27

    ajax呼び出しを同期する方法はありますか

  28. 28

    ZeroMQに非同期のクライアントとサーバーを配置する方法はありますか?

  29. 29

    nodejsが同期してディレクトリを作成するのは信頼できません

ホットタグ

アーカイブ