我在客户端上有一些使用$ .ajax()调用ashx处理程序的代码,并期望来自服务器的json数据。当我在本地网络服务器上运行应用程序时,FF,IE 6,7,8上的一切正常。但是,当我将应用程序部署到远程测试服务器时,IE停止工作($ .ajax返回parsererror),而FF继续按预期工作。
我的第一个想法是我的json对象必须有一个IE浏览器讨厌的试用逗号,但这不是问题,因为没有试用逗号。然后,我尝试将各种内容类型从app / json更改为tex / plain,仍然是同样的错误。
我发现奇怪的是,如果我启动提琴手,那么IE将远程工作,否则,我得到parsererror。
之前有没有人经历过这样的事情?感谢。
$.ajax({
type: "GET",
url: "handlers/GetAsyncResults.ashx",
contentType: "application/json; charset=utf-8",
data: {'from': dateFrom, 'to': dateTo, 'accountId' : aId, 'page': currentPage, 'sortField' : sortField, 'sortDirection' : sortDirection},
dataType: "json",
success: function(data) { GetAsyncResultsEnd(data); },
error: function(x, y, z) { GetAsyncResultsErrorHandler(x, y, z); }
});
编辑:添加了代码段。
答案 0 :(得分:1)
它已经分类了。感谢。
在服务器端,在我们调用了context.Response.Write('我们的json数据')之后,我们调用了context.Response.Flush()和context.Response.Close()。删除.Flush()和.Close()之后,一切都重新开始了。但是我仍然无法解释为什么它适用于Firefox而不是IE,也不能解释为什么小提琴手神奇地让它适用于IE。
谢谢。
答案 1 :(得分:0)
在JSON无效之前,唯一给我一个解析错误的东西。你说你检查了尾随空格,但是尝试运行你的json - JSON Lint。这对我来说效果很好。尽管小提琴手很有帮助,但这很有意思。
答案 2 :(得分:0)
尝试使用
contentType: 'application/json',
答案 3 :(得分:0)
您是否尝试过删除数据类型:“json”
我有同样的问题并删除修复它。删除它允许jQuery“智能地将responseXML或responseText传递给您的成功回调”。
答案 4 :(得分:0)
在我的ashx.cs方法中,我必须注释掉Flush()才能使其正常工作。
在此之前,我的json格式正确,一切似乎都有效,但JavaScript(JQuery .ajax POST调用)只会返回任何内容,FireBug不会报告错误,控制台没有报告错误,没有。它都在本地(在Visual Studio中)工作,但是当服务器上的所有内容都没有时。
//code from the ashx.cs file...
//...after populating the response, resp:
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
String json = jsonSerializer.Serialize(resp);
r.Write(json);
//r.Flush(); /////commented out! It returns to the .js file correctly!
....