这里希望有人可能会指出我可能帮助我找到底线的方向。
问题摘要:执行NORMAL表单提交(通过表单的HTML动作属性),打开target = _blank新闻窗口并允许刷新结果。刷新会向服务器发出另一个类似的POST请求。 另一个劫持表单提交的代码,执行AJAX POST请求,当收到响应时,我做一个window.open(“”)< - 空白窗口,我随后填充reponseText< - 这是只是从服务器收到的一些HTML代码。我确实有我的理由,我可以在最后解释,但它们没有增加任何帮助解决问题的意义。 问题是,使用FORM提交F5 / Refresh是可能的,这会产生另一个POST请求。使用AJAX时 - 不会发生F5 /刷新,不会发送其他请求。
一些调查结果:查看两种方法收到的回复,我可以看到AJAX请求/响应比IE提交工具和Fiddler提交的文件更轻松。有效载荷(即请求数据)可能没有得到保留吗? 但是,一个重要的区别是新窗口对象的 location.href 属性。在FORM的情况下,href匹配目标服务器URL。与在AJAX情况下一样,href等于发起者URL(发起请求的URL)。
代码示例:
fuction formSubmitHandler(event)
{
IF (hijackForm) {
event.preventDefault();
var data = "stringRepresentingFormData";
var request = new XMLHttpRequest();
request.open("POST", "action_url", true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-length", data.length);
request.onreadystatechange = function(){
if (request.readyState == 4 && request.status == 200) {
var oResultWindow = window.open("", "targetWindowId", "directories=no,menubar=no,location=no,status=no,scrollbars=yes,resizable=yes");
oResultWindow.document.write(request.responseText);
oResultWindow.focus();
}
}
request.send(data);
}
}
<BODY>
<FORM action="action_url" target=_blank>
<!-- SOME CODE HERE -->
</FORM>
</BODY>
如果有人能给出这方面的提示会很棒。总结一下: 1)当通过window.open()打开带有服务器响应文本的窗口时,F5 / Refresh不起作用。普通表单提交操作允许刷新。 2)location.href在两种方法之间是不同的。 FORM - 以server_url为目标。 AJAX - 目标请求发起者URL 3)我试图拦截F5 / Refresh动作,但这是另一个故事。
为什么REFRESH无法实现?如果需要更多评论,请告诉我。我没有在Stackoverflow上找到类似的案例,或者任何可以指向正确方向的案例。
P.S。至于我的理由 - 这是因为Citrix下的IE11,当重新定位表单时,存在一个目标属性覆盖JS的问题:)
答案 0 :(得分:0)
发送请求后,您应该构建并管理oResultWindow
。