【发布时间】:2010-06-05 10:37:32
【问题描述】:
我的 jQuery ajax 调用因 undefined 错误而失败。我的 js 代码如下所示:
$.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] 我应该写“当我返回任何 invalid JSON 对象时,调用失败”! :D
【问题讨论】:
-
你所拥有的不是有效的JSON,当你把它改成这样你会得到什么:
context.Response.Write("{ \"data\": [1,2,3] }");? -
非常感谢,成功了。 Firebug 对解析的要求显然不那么严格,所以我完全没有考虑。您可以将其复制到答案中,以便我接受。
-
Firebug 不解析 JSON,它正在解析 Javascript - 有区别。如果您使用 Firebug 将该字符串传递到严格 JSON 解析器的 Javascript 实现中,您会得到错误。
-
@Pointy:现在说得通了,但显示已解析对象的 Firebug 选项卡 实际上名为“JSON”。
-
完成 :) 很高兴为您解决了问题
标签: asp.net jquery ajax ashx generic-handler