-1

有时我看到人们将 json 发送到服务器:

$.ajax({
url: ...
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { 'page': '100AAAAAf00' },
responseType: "json",
success: ...,
error: ...
});

{ 'page': '100AAAAAf00' }不是Json

并说 contentType 是 json ...

Json 是文本表示。

例如:"{ 'page': '100AAAAAf00' }"

我在这里错过了什么吗?(jQuery 是否在幕后进行一些翻译?)

维基:

JSON 或 JavaScript 对象表示法,是一种基于文本 (!!) 的开放标准,专为人类可读的数据交换而设计。

4

3 回答 3

3
$.ajax("/", {

    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: {
        'page': '100AAAAAf00'
    },
    type: 'POST',
    responseType: "json"

});

错了。这将发送一个application/x-www-form-urlencoded带有请求正文的普通请求:

page=100AAAAAf00

但是由于标头是"application/json; charset=utf-8",它实际上是在向服务器撒谎。

要使用 jQuery 向服务器发送真实的、纯粹的、实际的 JSON,您可以使用:

$.ajax("/", {

    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: JSON.stringify({ //If data is string, jQuery will not try to process it
        'page': '100AAAAAf00'
    }),
    type: 'POST',
    responseType: "json"

});

现在请求正文将是:

{"page":"100AAAAAf00"}

这根本不能与 php 一起使用,$_POST因为它基于application/x-www-form-urlencoded..

可以在开发者工具中使用 Chrome 的网络标签来验证我的声明:

http://jsfiddle.net/sV5m4/1/ - 带有 json 标头的实际 json

在此处输入图像描述

和这里:

http://jsfiddle.net/sV5m4/2/ - x-www-form-urlencoded 标头声称是 json

在此处输入图像描述

于 2012-07-30T15:30:22.453 回答
1

有一个简单的函数可以将对象转换为 JSON 字符串...

JSON.stringify({ 'page': '100AAAAAf00' }) // => '{ "page": "100AAAAAf00" }'

另一种方式...

JSON.parse('{ "page": "100AAAAAf00" }') // => { page: '100AAAAAf00' }
于 2012-07-30T10:06:18.883 回答
1

在您的示例中,一切都是正确的,并且data属性是一个对象。

由于jQuery.ajax(); docs data属性可以是对象、数组或字符串。

如果它是一个数组或一个对象,jQuery 会对其进行序列化。

于 2012-07-30T10:07:28.077 回答