我有一个带有发送AJAX请求的JavaScript代码的HTML页面。请求由我的servlet处理。我认为从servlet(响应内容类型)返回数据为“application / json”MIME类型是“更好”和“更正确”。然而,它驱使MSIE疯狂 - 意味着浏览器似乎无法显示/处理这种MIME类型(Chrome / FF就好了)。当我明确指定没有类型时 - 它适用于所有浏览器。是否真的不应该从servlet为AJAX请求返回MIME类型?
更新:我的服务器端是用Java实现的,MIME类型由以下行定义:
response.setContentType("application/json");
响应是以下文本(仅示例):
{ "status" : "DONE", "progress" : 100, "url" : "/7909118672283641787.docx" , "totalBytes" : 17696 }
Update2:由我的客户端代码组成的代码段(普通的javascript,没有库)
function display_progress(http) {
if (http.readyState == 4) {
var again = false;
if (http.status != 200) {
document.getElementById('progress_bar').innerHTML = "Wrong response status received: " + http.status + "! Fix the server-side code.";
} else {
try {
var resp = eval('(' + http.responseText + ')');
var status = resp['status'];
if (status == 'DOING') {
document.getElementById('progress_bar').innerHTML = "Uploaded: " + resp['progress'] + "%";
again = true;
} else if (status == 'DONE'){
document.getElementById('progress_bar').innerHTML =
"Uploaded 100% (" + resp['totalBytes'] + " bytes)! Your file is <a href=\"" + resp['url'] + "\"/>" + "here" + "</a>";
} else if (status == 'ERROR') {
document.getElementById('progress_bar').innerHTML = "Error while uploading!";
} else {
document.getElementById('progress_bar').innerHTML = "Unexpected state: " + status + "! Fix the server-side code.";
}
} catch (ex) {
document.getElementById('progress_bar').innerHTML = "Wrong response received: " + resp + "! Fix the server-side code.";
}
}
if (again) {
setTimeout("update_progress()", 500);
}
}
答案 0 :(得分:3)
将其作为原始文本返回,然后使用JSON.parse()
转换为可用的JSON。
JSON不是文本,因此Firefox不知道如何处理它。因此,你需要基本上把它当作它所知道的东西。
答案 1 :(得分:0)
不,这不是真的....你可以为AJAX请求设置MIME类型...如果你没有设置它们......它们采用默认值....这恰好是.... “text / plain的”。 所以我猜默认值对你来说很好....更常见的响应类型恰好是“text / html”。这一切都取决于您将用于处理来自servlet的响应的代码......问题可能在于代码的那部分......
答案 2 :(得分:0)
正如此处所述:http://www.entwicklungsgedanken.de/2008/06/06/problems-with-internet-explorer-and-applicationjson/ text/javascript
是正确的解决方法。