0

jQuery $.getJSON/$.ajax callが単純な JavaScriptwindow.location = 'http://new.com/'イベントによって中断されるという奇妙な状況が発生しています。

  1. 火災イベント

    window.location = 'http://example.com/something-that-takes-a-couple-seconds';
    
  2. 上記の URL が接続されている間、ただしブラウザが実際に何かを再描画する前に、$.getJSON呼び出しを行います。私の場合、たまたまページの一番下までスクロールすると、これがトリガーされます (さらに結果が読み込まれます)。
  3. 実際に に移動するhttp://example.com/something-that-takes-a-couple-seconds代わりに、JSON URL に接続してhttp://example.com/ajax/getJSONList.php?params=...、プレーン テキストの JSON 結果セットを確認します。

以前にこの問題を抱えている人はいますか?

単純な解決策は、変更を開始した直後に必要な手段ですべての JavaScript の実行をブロックすることだと思いwindow.locationますか?

編集: ここでコードの動作を確認できます: http://myscubadives.com/ , しかし、それを通り抜けるのは特に楽しいものではありません.

再現するには: まず、右上にある Facebook ログイン ボタンを使用します。Facebook にサインインし、自分のサイトへのアクセスを許可します。Facebook ビットが接続されると、次の行が実行されます: location.replace('/user/facebook'); - location.replace()、location.href、window.location を試しました。すべて同じ問題。

ここで、「/user/facebook」が接続している間に、ページの一番下まですばやくスクロールします。これにより、getJSON 呼び出しが開始されます。「/user/facebook」を押す代わりに、RAW JSON が表示されます。

誰もこの方法で私を助けることができない場合は、できるだけ早く他のすべてのものを取り除いたサンプルページを作成しようとします.

4

1 に答える 1

0

window.location を変更すると、ブラウザが強制的に接続して新しいページの読み込みを開始し、すべての AJAX 呼び出しで古いページを放棄するべきではありませんか?

ええ、チェックして、window.location のプロパティを変更しますが、ハッシュはドキュメントのリロードを強制します。したがって、ブラウザーは現在のすべての AJAX 呼び出しをドロップして新しいドキュメントをロードするだけだと思います。これは、ブラウザーが行うことはかなり論理的です。

これを修正する方法については、window.location を設定した後、すべての AJAX 呼び出しを禁止します。

于 2011-03-22T08:06:54.103 に答える