2012-07-30 103 views
-2

有时候我see人JSON发送到服务器:无效的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对象符号,是一个基于文本的(!!) 开放标准设计为人类可读的数据交换。

+0

为什么这个问题是downvoted? – 2012-07-30 10:05:52

+0

我只能猜测,我没有倒下自己,但是:因为你开始说“它不是JSON”,这是有点..好..不是真的。因此,从这个陈述出来的任何问题都有点奇怪,因为它始于一个无效的假设。实际上你可能会问“这是JSON”而不是仅仅说它不是? – Nanne 2012-07-30 10:11:38

+0

@Nanne ** {'page':'100AAAAAf00'}不是Json。 TRY PARSE它,你会看到!** – 2012-07-30 10:12:40

回答

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",它实际上是躺在到服务器。

要发送,真正的,纯粹的,实际的JSON与jQuery的服务器,你可以使用:

$.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头

enter image description here

这里:

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

enter image description here

+0

谢谢。所以我的问题已经到位了,对吧?我确实注意到有问题的情况代码问题.....对吗? (就像在我的主要问题示例中)... – 2012-07-30 15:32:59

+1

@RoyiNamir是你的问题中的代码示例不发送json,但x-www-form-urlencoded – Esailija 2012-07-30 15:36:44

+0

:-(所以我不明白为什么这个问题是downvoted ....我认为他们根本不知道差别... – 2012-07-30 15:37:39

1

有一个简单的功能,将对象转换为一个JSON字符串...

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

其他各地的道路......

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

在你的榜样一切都是正确的, data属性是一个对象。

由于jQuery.ajax(); docsdata属性可能是对象,数组或字符串。

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

+1

所以数据本身不是json。 – 2012-07-30 10:08:10

+0

如果你设置了*字符串*,那么你可以直接设置JSON。但显然,任何不是字符串的东西都不能是JSON(因为JSON是文本格式)。 – Thilo 2012-07-30 10:09:44

+1

在你的情况下,它不是JSON。这是一个对象。 – 2012-07-30 10:09:45