Asp.net jQuery ajax调用失败,出现未定义错误
我的jQuery ajax调用失败,出现未定义的错误。我的js代码如下所示:Asp.net jQuery ajax调用失败,出现未定义错误,asp.net,jquery,ajax,ashx,generic-handler,Asp.net,Jquery,Ajax,Ashx,Generic Handler,我的jQuery ajax调用失败,出现未定义的错误。我的js代码如下所示: $.ajax({ type: "POST", url: "Data/RealTime.ashx", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", timeout: 15000, dataFilter: function(data, type) { aler
$.ajax({
type: "POST",
url: "Data/RealTime.ashx",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
timeout: 15000,
dataFilter: function(data, type) {
alert("RAW DATA: " + data + ", TYPE: "+ type);
return data;
},
error: function(xhr, textStatus, errorThrown) {
alert("FAIL: " + xhr + " " + textStatus + " " + errorThrown);
},
success: function(data) {
alert("SUCCESS");
}
});
我的ajax源代码是一个通用ASP.NET处理程序:
[WebService(Namespace = "http://my.website.com")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class RealTime : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
context.Response.Write("{ data: [1,2,3] }");
context.Response.End();
}
public bool IsReusable
{ get { return false; } }
}
现在,如果我在处理程序中返回一个空对象(“{}”
),调用将成功。但当我返回任何其他JSON对象时,调用失败
dataFilter
处理程序显示我正在接收正确的对象。Firebug按预期显示响应,JSON选项卡显示对象已正确解析
那么原因是什么呢
[Edit]我应该写“当我返回任何无效的JSON对象时,调用失败”!:D您需要有效的JSON:)
更改此行:
context.Response.Write("{ data: [1,2,3] }");
为此:
context.Response.Write("{ \"data\": [1,2,3] }");
jQuery1.4+不能像过去那样容忍无效的JSON(无声地/以奇怪的方式失败),所以只需添加双引号就可以了。要获得一个测试JSON有效性的便捷工具,请签出JSONLint:您拥有的不是有效的JSON,当您将其更改为以下内容时,您会得到什么:
context.Response.Write(“{”data\”:[1,2,3]}”)代码>?非常感谢,成功了。Firebug显然在解析它时没有那么严格,所以我根本没有考虑它。你可以把它复制到一个答案中,这样我就可以接受它了。如果您使用Firebug将该字符串传递到严格的JSON解析器的Javascript实现中,您可能会遇到错误。@Pointy:现在这是有意义的,但是显示已解析对象的Firebug选项卡实际上名为“JSON”。完成:)很高兴为您解决了这个问题是的,我上次使用这个东西是在jQuery 1.3.2中,它起了作用。有趣的是,我从来没有想过尝试一下旧项目,看看会发生什么@Groo-啊,是的,这是这些最常见的问题,但正如@Pointy所说,它们更严格……但出于某种原因,如果存在本机的JSON.parse
函数,我们可以使用浏览器更快的实现来完成这项工作,一旦所有浏览器都支持它,我们就能为所有人赢得胜利,jQuery只是在包装它,直到那时:)