6

可能重复:
$.ajax - dataType

我正在使用 jQuery 1.8.2,由于某种原因'application/json'不起作用,但'json' 可以作为dataType标准jquery ajax调用使用。这是一个故障吗?版本相关的差异?或者两者之间是否存在既定差异?

$(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
        }
    });
});
4

3 回答 3

11

dataType接受json,这意味着请求需要json响应。

contentTypetake 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 设置ContentTypeHTTP 请求头,告诉服务器这个请求的主体是给定的类型。
dataType 设置Accept标头告诉服务器这是我们想要的响应类型,例如

Accept:application/json, text/javascript, */*; q=0.01

但无论服务器发送什么类型的响应,jQuery 仍然会尝试将其解析为您在 dataType 字段中设置的任何类型。

于 2012-12-06T02:12:57.427 回答
1

“application/json”是 json 的正确 mime 类型。但是, jquerydataType字段需要以下字符串之一:

"xml"
"html"
"script"
"json"
"jsonp"
于 2012-12-06T02:13:21.837 回答
1

根据 json 文档,正确的数据类型是“json”。

http://api.jquery.com/jQuery.ajax/

以下是支持的选项:

  • xml
  • html
  • 脚本
  • json
  • jsonp
  • 文本
于 2012-12-06T02:13:23.650 回答