Ajax请求ashx页面疑问
前台代码
<head>
<script src="../JS/jquery-1.7.2.min.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
$.ajax({
type: "POST",
url: "Demo.ashx",
dataType: "text",
async: true,
cache: false,
data: { name: 'test' },
success: function(data) {
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('当你狂刷新页面的时候就弹出来了');
}
});
</script>
</body>
</html>
后台代码
<%@ WebHandler Language="C#" Class="Demo" %>
using System;
using System.Web;
public class Demo : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write("1");
}
public bool IsReusable
{
get
{
return false;
}
}
}
问题描述:我在用AJAX请求ASHX页面的时候请求有时候成功,有时候失败。同样的代码请求aspx页面或者asmx文件里面就不会出现这个问题。我想问下,这是ashx的一个bug吗?当错误出现的时候返回了12030状态码。当然去掉data属性或者把post修改为get等方式也是可以解决这个问题的。微软官网虽然有12030相关的资料,但是并没有给出解决的办法。难道是ashx本身的机制问题吗?求帮忙,谢谢!
[解决办法]
data: { "val1": v1, "val2": v2 }, //注意!!!ASHX和WebService传data格式不同!!这是WS的 data: "{val1:'" + v1 + "',val2:'" + v2 + "'}",
引号问题 你试试
[解决办法]
我当时碰到的问题跟你一样 后来就是data传值写法不一样 你可以试试先
[解决办法]
如果不报异常的方案如下
方案一:
POST 修改成 GET
方案二:服务器端修改
实现如下的接口:
Demo : IHttpAsyncHandler
注:IHttpAsyncHandler 的方法实现后即可达到效果。
具体原理解释,还请自己去琢磨吧。
[解决办法]
直接用 IHttpHandler,是无法判断请求来源是post还是get方式,12030错误是
No response headers received because request failed : ERROR_INTERNET_CONNECTION_ABORTED【连接退出提示】
IHttpHandler的解释为: 定义 ASP.NET 为使用自定义 HTTP 处理程序同步处理 HTTP Web 请求而实现的协定。
IHttpAsyncHandler 的解释为:定义 HTTP 异步处理程序对象必须实现的协定。
既然是同步,ajax反应有时间差,请求时候会堵塞下一个请求。从Http链接的建立到数据发送到客户端的整个过程都是连续的。
所以,快速连刷的情况下 需要实现 IHttpAsyncHandler异步接口.
以上个人理解,有不足之处还请指正。
[解决办法]
如果单从异步方式来讲,肯定是不全面的,因为本身AJAX的提交可以修改同步,异步方式,而且再GET下是没有问题的
于是,我突然想到一个问题,在处理程序中没有接受Post过去的值,可能引发此问题
context.Response.ContentType = "text/plain";
string ss = context.Request.Params["name"];//接受一下提交值
context.Response.Write("1");
LZ可以试试,应该没什么问题,但是究竟是什么原因,不明.