Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回哪种MIME类型?_Javascript_Content Type_Mime Types - Fatal编程技术网

Javascript 返回哪种MIME类型?

Javascript 返回哪种MIME类型?,javascript,content-type,mime-types,Javascript,Content Type,Mime Types,我有一个HTML页面,其中包含发送AJAX请求的JavaScript代码。请求正在由我的servlet处理。我认为从servlet(响应内容类型)以“application/json”MIME类型返回数据“更好”和“更正确”。然而,它让MSIE疯狂——这意味着浏览器似乎无法显示/处理这种MIME类型(Chrome/FF很好)。当我没有显式指定类型时,它在所有浏览器中都可以正常工作。对于AJAX请求,servlet不应该返回MIME类型,这是真的吗 更新:我的服务器端是用Java实现的,MIME类

我有一个HTML页面,其中包含发送AJAX请求的JavaScript代码。请求正在由我的servlet处理。我认为从servlet(响应内容类型)以“application/json”MIME类型返回数据“更好”和“更正确”。然而,它让MSIE疯狂——这意味着浏览器似乎无法显示/处理这种MIME类型(Chrome/FF很好)。当我没有显式指定类型时,它在所有浏览器中都可以正常工作。对于AJAX请求,servlet不应该返回MIME类型,这是真的吗

更新:我的服务器端是用Java实现的,MIME类型由以下行定义:

response.setContentType("application/json");
答复如下(仅为示例):

Update2:由客户端代码组成的代码段(纯javascript,无库)

功能显示\u进度(http){
如果(http.readyState==4){
var=假;
如果(http.status!=200){
document.getElementById('progress_bar')。innerHTML=“收到错误的响应状态:“+http.status+”!修复服务器端代码。”;
}否则{
试一试{
var resp=eval('('+http.responseText+'));
var状态=resp[‘状态’];
如果(状态=‘正在进行’){
document.getElementById('progress_bar')。innerHTML=“上传:”+resp['progress']+“%”;
再次=正确;
}否则如果(状态=‘完成’){
document.getElementById('progress\u bar')。innerHTML=
“上传100%(“+resp['totalBytes']+”字节)!您的文件是”;
}否则,如果(状态=='ERROR'){
document.getElementById('progress_bar').innerHTML=“上传时出错!”;
}否则{
document.getElementById('progress_bar')。innerHTML=“意外状态:“+status+”!修复服务器端代码。”;
}
}捕获(ex){
document.getElementById('progress_bar')。innerHTML=“收到错误响应:“+resp+”!修复服务器端代码。”;
}
}
如果(再次){
setTimeout(“更新进度()”,500);
}
}

不,这不是真的……您可以为AJAX请求设置MIME类型……如果您没有设置它们……它们采用默认值……正好是……“text/plain”。
因此,我猜默认设置对您来说很好……一种更常见的响应类型恰好是“text/html”。这完全取决于您将用于处理来自servlet的响应的代码……问题可能在于代码的这一部分……

将其作为原始文本返回,然后使用
JSON.parse()
转换为可用的JSON


JSON不是文本,因此Firefox不知道如何处理它。因此,您基本上需要将它作为它知道的东西来使用。

正如这里所解释的:
text/javascript
是正确的解决方法。

您使用什么代码来处理响应?JSON数据应该作为
应用程序/JSON
来使用。如果不起作用,问题在别处。@Pekka:请查看更新no,我的意思是您在客户端使用什么代码来处理它?具体是什么中断?@Pekka:请查看更新2。实际上没有中断,只是进度条上的状态没有更新。(默认值)更正确的是:这恰好是……无论Web服务器配置为什么。流行的类型包括text/plain、text/html和application/octet stream。@T-Bull感谢您的更正……我的大学讲师教我……将与他接洽……只是在问题正文中添加了一些示例-知道我做错了什么吗?刚刚添加我在Fly上构建的原始文本并非所有浏览器都有
JSON
。您可能需要从这里使用json2.js:
{ "status" : "DONE", "progress" : 100, "url" : "/7909118672283641787.docx" , "totalBytes" : 17696 } 
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);
        }
    }