表单提交与AJAX(以及window.open调用)行为

时间:2015-08-26 14:47:06

标签: javascript ajax forms location page-refresh

这里希望有人可能会指出我可能帮助我找到底线的方向。

问题摘要:执行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的问题:)

1 个答案:

答案 0 :(得分:0)

发送请求后,您应该构建并管理oResultWindow