0

我在客户端上有一些代码使用 $.ajax() 调用 ashx 处理程序并期望来自服务器的 json 数据。当我在本地网络服务器上运行应用程序时,在 FF、IE 6、7、8 上一切正常。但是,当我将应用程序部署到远程测试服务器时,IE 停止工作($.ajax 返回解析器错误),而 FF 继续按预期工作。

我的第一个想法是我的 json 对象必须有一个 IE 讨厌的逗号,但这不是问题,因为没有试用逗号。然后,我尝试将各种内容类型从 app/json 更改为 tex/plain,仍然是同样的错误。

我发现奇怪的是,如果我启动 fiddler,那么 IE 将远程工作,否则,我会收到解析器错误。

有没有人经历过这样的事情?谢谢。

$.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); }
    });

编辑:添加代码片段。

4

5 回答 5

1

整理好了 谢谢。

在服务器端,在我们调用 context.Response.Write( 'Our json data' ) 之后,我们接着调用 context.Response.Flush() 和 context.Response.Close()。在我们删除 .Flush() 和 .Close() 之后,一切又开始工作了。但我仍然无法解释为什么它适用于 firefox 而不是 IE,也无法解释 fiddler 如何神奇地使它适用于 IE。

谢谢你。

于 2009-08-19T04:23:30.173 回答
0

您是否尝试过简单地删除数据类型:“json”

我有同样的问题并删除它修复了它。删除它允许 jQuery “智能地将 responseXML 或 responseText 传递给您的成功回调”。

于 2009-09-29T21:13:22.017 回答
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!
....
于 2013-08-01T17:05:12.843 回答
0

在 JSON 无效之前唯一给我一个解析错误的东西。您说您检查了尾随空格,但尝试通过 - JSON Lint运行您的 json 。这对我来说效果很好。有趣的是,提琴手有帮助。

于 2009-08-19T03:23:30.400 回答
0

尝试使用

contentType: 'application/json',
于 2009-08-19T03:48:32.053 回答