0

これは「jQuery を使用してページを更新するにはどうすればよいですか?」と似ていますが、同じではありません。:

ユーザーからいくつかのものを収集し、呼び出しを介してサーバーに渡すモーダル フォームを表示し$.ajax()ます。window.locationサーバーは、ブラウザーの新しいパスになるはずのパスを返信します。したがって、ajax 呼び出しは次のようになります。

$.ajax({
   // stuff

   success: function (destination) {
      // other stuff
      window.location = destination;
   }),

   // still more stuff
});

ブラウザが現在そのページにない場合などdestination純粋なパスである限り、これは正常に機能します。ただし、パス現在表示しているページであり、ターゲット -- も含まれている場合、私は負けます。ブラウザは、指定されたターゲットにページを再配置するだけで、ページの新しいビューのためにサーバーにアクセスしません。これが必要です(サーバーがajax呼び出し中にいくつかのことを行ったため)。/some_path /some_path#some_target

それで、多分私は呼び出しのlocation.reload()後に追加するだけですか?window.locationコードが返されるページでコードが実行されている場合、それはうまくいくと思います。しかし、別のページにいる場合、ブラウザが変更を完了する前にリロードが呼び出される競合状態に陥り、window.location新しい宛先ではなく古いページがリロードされます。

ブラッフ。これを回避する方法はありますか?

4

2 に答える 2

2

1 つのアプローチは、window.location.pathname(またはなしのパス) が成功コールバック内と同じ#かどうかを確認することです。?destination

 success: function (destination) {
      // other stuff
      if (destination === window.location.pathname) {
          window.location.reload(); // reload if we are on the same page
      } else {
          window.location = destination; // otherwise, navigate to "other" page
      }
   }),
于 2013-08-04T00:53:24.453 に答える
0

window.location.reload()現在のページを POST データでリロードしますが、window.location.href=window.location.hrefPOST データは含まれません。

于 2013-08-04T00:44:27.913 に答える