<head>
<script src="../JS/jquery-1.7.2.min.js" type="text/javascript"></script>
</head>
<body>
<div id="divPanel">
</div>
<script type="text/javascript">
$.ajax({
type: "POST",
url: "http://192.168.1.100/Demo/Test/Demo.ashx",
dataType: "text",
async: true,
cache: false,
data: { name: 'test' },
success: function(data) {
$("#divPanel").text(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('当你狂刷新页面的时候就弹出来了');
}
});
</script>
</body>
<%@ WebHandler Language="C#" class="Demo" %>
using System;
using System.Web;
public class Demo : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss--fffffff");
context.Response.Write(dateString);
}
public bool IsReusable
{
get
{
return false;
}
}
}
当我们狂刷新的时候老出现12030错误,但是在不同浏览器里面报错的几率不一样
应该是SOCKET错误,服务器因为某些原因重置或终止了当前连接。
嗯,确实是这个问题。同时官网给给出了这个错误代码的定义,但是我没有找到解决的办法。
@李财: 我建议你先做个排查,把POST http://192.168.1.100/Demo/Test/Demo.ashx 改成 GET http://192.168.1.100/Demo/Test/Demo.txt",也就是说使用IIS自带的StaticFileHandler来测试下是否为服务器端的问题。
修改为get出现问题的几率会小很多,但是还是会出现问题。另外项目中没有中文名称。把data属性去掉出现问题的几率也要小多了。但是只要不断刷新,问题还是会出现的
弱弱的问下, Response 不需要 end 吗 ?
ashx是不需要end的,当然你也可以调用end方法,但是问题依旧会出现。而已这中问题是间断性的出现,连出现的频率都不确定
@李财: 我来本地试试吧,
@李财:
setTimeout(function () { $.ajax({ type: "GET", url: "test.ashx?" + +new Date(), success: function (data) { $("#divPanel").text(data); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert('当你狂刷新页面的时候就弹出来了'); } }); }, 500);
作个延时处理吧!
@张坤: 延迟还是会出现问题的
@李财: 恩,我在本地试了,没有呢,要不你把时间改成 1000,对了,为什么会有如此需求?
@张坤: 这并非一个特殊需求,就是在平常的应用中出现的一个bug而已。刷新只是为了模拟
为毛要狂刷页面呢?
刷新的目的只是为了让错误再现,没其他意思。因为这样的错误在项目中随时都有出现的几率
最可能的原因你防火墙或其他分发代理软件,它认为你这是恶意请求,就会直接中断你的请求。特别是POST,因为网络中大部分是GET请求。