在我的 ASP.NET WebForms 页面中,我有一个弹出的模态窗口。显示此模态窗口的 javascript 代码如下:
function OpenMailAddressWin(subscriberContactRelationGid, routeId, btn) {
window.showModalDialog("SubscriberSecondaryAddress.aspx" + BuildQueryStringValuesForSubscriber(subscriberContactRelationGid, routeId, returntxtReceiptDate().value), this, strWindowFeatures + ";scroll:no;dialogWidth:442px;dialogHeight:350px");
location.reload(true);
}
模态窗口关闭后,我需要刷新父页面(因此 location.reload(true); 最后的语句)以使模态窗口中所做的更改生效。
现在的问题是,有时(不是每次,真气人)当我关闭这个模式窗口时,我会收到一个警告弹出窗口,上面写着:
"要再次显示该网页,Internet Explorer 需要重新发送您最近提交的信息。
如果您正在购买,您应该点击取消以避免重复交易。否则,请单击“重试”以再次显示该网页。”
知道为什么会这样吗?
最佳答案
这是浏览器中的双重提交问题。
当使用 POST 请求加载页面并且您尝试使用 location.reload(true);
重新加载页面时,浏览器需要向服务器发送另一个 POST 请求,这可能会导致问题因为 POST 应该更改服务器上的状态。因此,浏览器需要用户的确认。为了解决这个问题,我们通常使用POST-REDIRECT-GET模式。
在您的情况下,只需使用 location.href = location.href
即可解决问题,因为这将使用 GET 重新加载页面。
关于javascript - 要再次显示该网页,Internet Explorer 需要重新发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17723944/