5

コンテンツを投稿したページがあります。Cmd+R を使用するか、ブラウザの更新ボタンを使用して Safari で上記のページを更新すると、次のようなポップアップが表示されます。 ここに画像の説明を入力

この動作は、他のブラウザー (Chrome、FF など) でも同じです。

しかし、Safari でwindow.location.href = location.hrefまたはlocation.reload()またはwindow.location.reload()またはwindow.location.reload(true)を使用して、javascript を使用して同じページを更新しようとすると、上記のポップアップは表示されません。ただし、この動作は、同じポップアップが表示される Chrome や FF などでは異なります。

編集:ポップアップが表示されないという結果は、投稿されたコンテンツが再送信されないため、動作が変化することです。

だから私の質問は、投稿されたフォームのコンテンツが再送信されるように、すべてのブラウザーでページをリロードする方法です。

4

2 に答える 2

1

AJAX 経由

私が知る限り、更新中に Safari に POST データを強制的に再送信させる方法はありません。この問題を「修正」する唯一の方法は、結果が表示されるドキュメントからロジックを分離することです。これが実際に意味することは、AJAX リクエストを使用してコードから必要なロジックをトリガーできる一方で、ドキュメント自体は (比較的) ダムページになるということです。

したがって、得られるものは次のとおりです。

POST document.ext

#In whatever server side language you're using, the reason this can't be done
# purely in javascript is that POST data is only available to the server.
print "<script>"
print "POSTdata = " + JSONEscape(POSTdata) + ";"
print "var doAction = function(){"
print "  ajax('action.ext', POSTdata, function(result){});"
print "});"
print "</script>"
print "<button onclick='doAction()'>Refresh</button>"

POST action.ext

# all the logic you previously had in document.xxx

この結果は次のとおりです。

  • すべてのブラウザーで、ユーザーが開始した更新によってPOSTデータが送信され、ロジックが再トリガーされます。
  • 更新ボタンは、ページ全体をリロードすることなく、常にロジックを直接再トリガーします。

自己提出フォーム

これを実現するための別の - 実装が簡単な - 方法は<form action='?' method='POST'>、コード内で関数をトリガーするだけsubmitです。を引き続き使用する必要がありますがprintPOSTdataAjax 呼び出しをトリガーする代わりに、hidden を介して同じページへのリダイレクトをトリガーするだけです<form>。これの利点は、再構築を必要としないことですが、個人的には AJAX メソッドの方が見栄えが良いと思います。簡単な Google-fu は、プロセスの詳細を示すこれらの回答を示しました。

于 2015-05-28T12:36:11.600 に答える
0

本当に確認なしでページを更新したい場合は、リダイレクトを使用する必要があります。したがって、ページ A にデータを投稿し、投稿情報をセッションまたは Cookie に保存してから、ページ B をリダイレクトしてレンダリングします。

または、ページ A でビジネス ロジックのすべてを実行し、ページ B を単なるサンキュー ページとして使用することもできます。

すると、Bページで確認せずに更新できます。

于 2015-05-29T03:41:12.933 に答える