最近,我开始面临一个问题,我的一个脚本从服务器加载json响应。我正在使用jquery.ajax()来进行ajax调用。代码片段就是 -
var request = $.ajax({
url: "script.jsp",
type: "POST",
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(response, error) {
console.log(response, error);
}
});
正如我所提到的,这个脚本最近才起作用。我没有对服务器端代码或前端代码进行任何更改。 json响应有点大~1 MB大小。但我使用 -
验证了json输出python -mjson.tool < output.json
正确打印出来。好奇的是FF&amp; Chrome处理方式不同。
在FF中,我打开firebug并查看正在进行的ajax请求。我看到请求在大约300毫秒内提供,但控制台中链接旁边的加载轮仍然是20秒的动画。之后,json响应被正确处理,结果可以在页面上看到。在IE中也有类似的行为,20秒后正确处理json。
在Chrome中,大约20秒后没有任何反应,之后我在控制台中看到错误"error": undefined
或Failed to load resource
。或者它也会打印下面的堆栈跟踪 -
POST script.jsp
f.support.ajax.f.ajaxTransport.sendjquery.min.js:4
f.extend.ajaxjquery.min.js:4
DataTableWidget.extend._fetchBuildingBlockItemsPermissionBBItemsWidget.js:91
(anonymous function)PermissionBBItemsWidget.js:83
e.extend.eachjquery.min.js:2
DataTableWidget.extend._loadDataPermissionBBItemsWidget.js:82
DataTableWidget.extend.showPermissionBBItemsWidget.js:15
(anonymous function)permission-building-blocks.html:451
xLAB.min.js:5
ULAB.min.js:5
jLAB.min.js:5
ILAB.min.js:5
eLAB.min.js:5
a.onload.a.onreadystatechange
我不理解不同浏览器中这种奇怪的行为。
所以从本质上说我确定了 -
所以关于这个问题的任何指示都将是一个很大的帮助。感谢。
更新 我注意到了一个奇怪的事情。在处理请求时,即使在原始请求的3秒内我点击刷新按钮,该过程也会立即完成。正如我在后面的视图中看到的更改,因为刷新事件导致页面被擦除。
更新2
我注意到在用字母表填写了我的大回答之后。只有某些答复才会出现勒on响应的问题。我通过http://jsonformatter.curiousconcept.com/#jsonformatter运行了这个拆分长响应文件,虽然它立即返回说josn有效,但实际打印响应需要20多秒。我认为问题是由\u0026
之类的某些字符引起的,所以添加了这些信息,如何解决问题? Here is the snipet of the problematic json.
答案 0 :(得分:3)
我弄明白了这个问题。问题在于服务器端代码如何使用json字符串提供客户端代码JavaScript。
我在我们的代码库中使用了一个遗留方法,它在将json页面传递给客户端之前实际呈现了json字符串。这在某种程度上搞砸了回应。响应类型也是text / html因此。
只要我将响应切换为实际的application / json MIME类型流,一切都很好。
答案 1 :(得分:0)
您的JSON是否有换行符?你有Firebug或打开的线路吗?浏览器可能正好加载JSON,它可能是你的调试工具。我回想一下,在使用某些工具检查某些JSON字符串之前遇到的问题只是因为它没有换行符(或者在Windows中理解的换行符)。我想知道你将整个事情记录到控制台的事实是否与它有关。