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
です。を引き続き使用する必要がありますがprint
、POSTdata
Ajax 呼び出しをトリガーする代わりに、hidden を介して同じページへのリダイレクトをトリガーするだけです<form>
。これの利点は、再構築を必要としないことですが、個人的には AJAX メソッドの方が見栄えが良いと思います。簡単な Google-fu は、プロセスの詳細を示すこれらの回答を示しました。