我的网页内容已发布。当我使用Cmd + R或使用浏览器刷新按钮在Safari中刷新所述页面时,弹出窗口显示如下:
此行为在其他浏览器(Chrome,FF等)中也是相同的。
但是当我尝试使用 window.location.href = location.href 或 location.reload()或使用javascript刷新同一页面时在Safari中,window.location.reload()甚至是 window.location.reload(true),它没有显示上面提到的弹出窗口。但是在Chrome,FF等中出现相同弹出窗口的行为有所不同。
编辑:弹出窗口未显示的结果是发布的内容不会重新发送,因此行为会发生变化。
所以我现在的问题是如何在所有浏览器中重新加载页面,以便重新发送已发布的表单内容。
答案 0 :(得分:1)
据我所知,没有办法强制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调用,而是通过隐藏的<form>
触发重定向到同一页面。这样做的好处是它不需要任何重组,但我个人认为AJAX方法看起来更整洁。一个快速的Google-fu显示these answers详细说明了procress。
答案 1 :(得分:0)
如果您确实想在未经确认的情况下使用刷新页面,则应使用重定向。因此,您将数据发布到页面A,并将帖子信息保存在会话或cookie上,然后将页面B重定向到渲染。
或者您可以在第A页上为您的业务逻辑执行所有操作,并使用页面B作为一种感谢页面。
然后,您可以在没有确认的情况下刷新第B页。