2016-09-29 12 views
0

私はajax呼び出しを実行して、同時に別のページにリダイレクトする関数の一部として実行します。このコードは他のユーザーのウェブサイトで実行されるため、私はpreventDefault()を使用したくないため、これはユーザーエクスペリエンスに影響を与える可能性があり、過去に試したときに多くの問題を引き起こしています。コールが少しでも失敗した場合、それは大きな問題ではありませんが、私の経験ではすべてのブラウザで一貫して動作することがわかりました。SafariとFirefoxでエラーなしでajax呼び出しが失敗しますが、Chromeで動作します。

AJAX呼び出しが

$.ajax({ 
    type: 'GET', 
    url: 'URL', 
    dataType: 'json', 
    success: function(data) { 
     // stuff 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log("AJAX call failed. Status - " + textStatus); 
     console.log("Reason - " + errorThrown); 
    } 
}); 

しかし、ある特定のウェブサイトのために、私はいくつかの本当に奇妙な行動を見ていると、次のようになります。 Chromeで期待どおりに実行されます。しかし、私はSafariとFirefox用の私のコンソールで次のように見ています。 jqXHRオブジェクトの

AJAX call failed. Status - error. 
Reason - 

readyStatestatusプロパティが両方0

URLはので、私はそのためではなくクロスオリジンポリシーの確信している別のドメインを指していないされています。

this onethis oneのような他の類似したStackOverflowの質問については、ajax呼び出しが完了する前にブラウザがリダイレクトされるようです。

私は次のことについて不思議です。

  • SafariとFirefoxでこのような現象が発生するのはなぜですか? Chromeは非同期リクエストを覚えているだけで、保留中のコールバックを削除しないようにしていますか?
  • preventDefaultを使用せずに修正できますか?

答えて

0

今日私も、同じような問題で苦労していました。この呼び出しはIEとChromeでは問題なく動作しますが、実際のネットワーク要求が200回成功してもデータは消えてしまったにもかかわらずSafariやFirefoxでは機能しません。

$(document).ready()関数内でAJAXコールを折り返すと問題が解決されたようです。

元々、私が作業しているサイトでHistory APIを使用してページ間を移動していました(新しいコンテンツをロードすると、既にロードされている関数をトリガーする準備ができました)サイト訪問ごとにAJAXコール1回)。

これで、各ページの読み込みに同じデータが1回ではなく読み込まれますが、少なくともすべてのブラウザで動作しています。うまくいけば、これは私のようにGoogleからこの質問に上陸した場合に役立ちます。

DOMが準備が整う前に、FirefoxとSafariがAJAX呼び出しを正しく完了できない理由は考えられません。

関連する問題