我有一个包含JavaScript代码的HTML页面,它发送AJAX请求。请求由我的servlet处理。我认为从servlet(响应内容类型)以“application/json” MIME类型返回数据是“更好”和“更正确”的。然而,这会让MSIE出现问题——也就是说,浏览器似乎无法显示/处理此MIME类型(Chrome/FF没有问题)。当我不明确指定类型时,在所有浏览器中都可以正常工作。是否真的应该对AJAX请求不返回任何MIME类型?
更新:我的服务器端使用Java实现,并通过以下行定义MIME类型:
响应是以下文本(仅为示例):
更新2:代码片段由我的客户端代码制成(纯JavaScript,无库)
更新:我的服务器端使用Java实现,并通过以下行定义MIME类型:
response.setContentType("application/json");
响应是以下文本(仅为示例):
{ "status" : "DONE", "progress" : 100, "url" : "/7909118672283641787.docx" , "totalBytes" : 17696 }
更新2:代码片段由我的客户端代码制成(纯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);
}
}
application/json
提供。如果有什么问题,那么问题就在其他地方。 - gen_EricsetTimeout("update_progress()", 500);
应改为setTimeout(update_progress, 500);
,这样可以避免对字符串进行 eval 操作。根据 @user400908 的回答,应该使用JSON.parse
而不是eval
。 - gen_Eric