数据类型 'application/json' 与 'json' 的区别是什么?

6

可能重复:
$.ajax - dataType

我正在使用jQuery 1.8.2,但出于某种原因,'application/json'不起作用,但是'json'作为标准的jquery ajax调用的dataType可以正常工作。这是一个故障吗?与版本有关吗?还是两者之间存在已知的区别?

$(document).ready(function() {
    $.ajax({
        type : "POST",
        url : '<c:url value="/url.htm" >',
        //dataType : "application/json", <-- does not work
        dataType: 'json' // <-- works
        success : function(data) {
            // do something          
        },
        error : function(data) {
            // do something else
        }
    });
});

1
你能发布你的代码吗?另外,请看这里:https://dev59.com/cXRB5IYBdhLWcg3w4bKv - jchapa
dataType 有一组有限的(以空格分隔的)选项,它不是 MIME 类型。请参阅手册 - Ja͢ck
3个回答

11

dataType接受json格式数据,这意味着请求期望获得一个json响应。

contentType接受application/json格式数据,这意味着请求正在发送json数据

您可以在请求中发送和接收json数据,例如:

$.ajax({
    type : "POST",
    url : url,
    contentType : "application/json", 
    dataType: 'json',
    data: JSON.stringify({some: 'data'}),
    success : function(data) {
        // do something          
    },
    error : function(data) {
        // do something else
    }
});

在这里你正在发送 JSON 并期望接收 XML

$.ajax({
    type : "POST",
    url : url,
    contentType : "application/json", 
    dataType: 'xml',
    data: JSON.stringify({xmlfile: 'file.xml'}),
    success : function(data) {
        // do something          
    },
    error : function(data) {
        // do something else
    }
});

在这里,你正在发送x-www-form-urlencoded(jQuery 会自动为你设置此选项),并期望返回 json 数据

$.ajax({
    type : "POST",
    url : url,
    dataType: 'json',
    data: {id: '1'},
    success : function(data) {
        // do something          
    },
    error : function(data) {
        // do something else
    }
});

contentType设置ContentType HTTP请求头,告诉服务器此请求的主体是给定类型。
dataType设置Accept头,告诉服务器这是我们想要的响应类型,例如。

Accept:application/json, text/javascript, */*; q=0.01
但无论服务器发送何种类型的响应,jQuery仍会尝试将其解析为dataType字段中设置的类型。

我觉得如果能进一步扩展并解释一下$.ajax在幕后是如何工作的,让服务器知道我们的期望和发送的内容,那将会很酷。 - DutGRIFF

1
"

application/json" 是 JSON 的正确 MIME 类型。然而,jQuery的dataType字段期望以下字符串之一:

"
"xml"
"html"
"script"
"json"
"jsonp"

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接