IE9的F12工具,"网络"页签,点击"开始捕获"之后,请求显示的状态是"挂起"的分析和解决

      最近一个项目,客户端使用用jquery编写ajax请求,服务端采用struts2框架。JS发送请求和action处理请求过程中,遇到一个问题。刚开始觉得问题很诡异,仔细定位很久之后才发现问题,虽然问题解决了, 但更深层次的原因还不清楚,欢迎大牛们指导。

1.问题现象

  • 客户端问题
            通过IE9下的开发人员工具F12发现,浏览器的确是发送了post请求,但是该请求“结果”栏显示的是“已终止”,“发起程序”值 是“已挂起”。请求头、请求体、响应头、响应体都是空的。也就说浏览器发送了1个异常的请求。
  • 服务端问题
          Struts2的action能够接受到post的请求,但是获取不到请求参数的值。

2.相关JS代码

function sendMessage()   
{  
  $.post("indvAction!sendShortMsg.action", {  
     "configType" : "1"  
  });  
}  
   
//弹出确认对话框  
Nf.promptConfirm({  
                  message :”operation success”,
				  width : 300,
				  height : 150, 
				  handler : function(btn)
							{
								if (btn == "ok") 
								{  
									//向服务器发送ajax请求  
									sendMessage()
									//关闭当前页面  
									NfLayout.closeTab();  
								}  
							
							}

                  });

3.定位过程

    刚开始使用F12没有得到与定位问题有关的信息。后面使用httpWatch或burp suite进行http抓包,查看原始的http请求和响应报文。结果发现了问题。

1、浏览器发出的请求报文中,的确没有传递configType字段的值。请求报文如下:          
POST /mobile/jsp/indvconfig/indvAction!sendShortMsg.action HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: zh-CN,en;q=0.5
Referer: https://*.*.*.*:17243/mobile/jsp/indvconfig/indv_config.jsp
Accept: */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: 11.12.213.87:17243
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=62C9FF9CBC97731B120ABAC297C4E4C5

 2、浏览器的确收到了服务器的响应报文。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=UTF-8
Vary: Accept-Encoding
Date: Fri, 22 Nov 2013 01:34:31 GMT
Content-Length: 6

this is my response!

其实一切都很正常了,浏览器确实发送了HTTP请求,只不过是没有携带请求参数值,只不过是被IE9的展示方式欺骗了,所以刚开始定位很久都没有头绪。现在产生了如下问题:为什么浏览器发送了ajax请求,但是没有携带请求参数?为什么IE9显示请求是“已挂起”、“已终止”

4.问题解决

    去掉NfLayout.closeTab();这行代码就可以解决问题了。这是因为jquery的POST请求是异步的,当post请求还没有准备好数据的时候,这个时候执行了NfLayout.closeTab();当前页面关闭,导致了浏览器终止了http请求。这样的话就,相当于是请求被异常终止,于是IE9显示请求“已挂起”、“已终止”。具体深层次的原因不清楚,下面是个人一些猜想和解释:

1、 JS代码只有加载才会被执行,而触发js加载的正是html/jsp页面的显示。所以,我觉得Html/jsp就是js的执行环境。如果js还没有执行完,页面关闭的话,后续js代不会再执行。测试代码如下:

<head>
 <script type='text/javascript'>
 function test()
 {
  alert(1111);
  window.opener = "";
  window.open("","_self");
  window.close();
  alert("我不会在执行了,因为页面已经关闭。");
  //setTimeout('callBack( )', 3000)
 }
 </script>
</head>
<body>
 <input id="button_-12你" type="button" value="testRight" οnclick="test();">
</body>

个人感觉,可能是jquery拼post的请求体,会相对比较耗时,还没有执行完毕。此时页面关闭,JS终止了执行,浏览器发送了1个不完全的HTTP请求(没有附上请求体)。  这是个人的猜测,大家有自己见解的,欢迎指教。基于这个结论,我们将POST请求,改成Get请求,虽然IE9显示的还是请求终止,但是服务端能够收到请求的参数值了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
IE11-F12开发人员工具是Internet Explorer 11浏览器的一项强大的调试工具。它提供了一系列功能,使开发人员能够在开发和调试网页时更加高效和便捷。 首先,IE11-F12开发人员工具可以帮助开发人员分析和修改HTML、CSS和JavaScript代码。它提供了DOM树视图,可以查看和编辑网页的HTML结构,快速定位到特定的元素并进行相应的修改。它还提供了CSS编辑器,可以实时查看和修改网页的样式,并即时反馈效果。同时,它还具备JavaScript调试功能,可以设置断点、监视变量,并逐步执行代码以定位和解决问题。 其次,IE11-F12开发人员工具还提供了网络分析功能。开发人员可以通过它查看网页的请求和响应信息,了解每个资源的加载时间及其性能指标,从而优化网页的加载速度和性能。此外,它还支持模拟网络速度和断网情况,帮助开发人员在不同网络环境下测试网页的表现。 另外,IE11-F12开发人员工具还具备调试器工具,支持脚本调试和错误排查。开发人员可以在JavaScript代码中设置断点,逐行调试,并查看变量的值和堆栈的调用情况。同时,它还提供错误控制台,显示网页中的错误和警告信息,帮助开发人员快速定位和修复问题。 除此之外,IE11-F12开发人员工具还包括性能分析器、内存分析器、DOM资源分析器等功能,可以帮助开发人员评估和优化网页的性能。 总之,IE11-F12开发人员工具是一款功能强大的调试工具,提供了多种功能和工具,帮助开发人员分析、修改和优化网页的代码和性能。它对于网页开发人员来说是一个不可或缺的利器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值