有时我 see 人们将json发送到服务器:
$.ajax({
url: ...
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { 'page': '100AAAAAf00' },
responseType: "json",
success: ...,
error: ...
});
但是{ 'page': '100AAAAAf00' }
不是 Json。
并且说contentType是json ...
Json是文本表示。
e.g。 :"{ 'page': '100AAAAAf00' }"
我在这里遗漏了什么吗? (jQuery是否在幕后进行一些翻译?)
维基:
JSON或JavaScript Object Notation,是基于文本的(!!) 为人类可读数据交换而设计的开放标准。
答案 0 :(得分: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"
,因此实际上谎言</ strong>到服务器。
要使用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
答案 1 :(得分:1)
有一个简单的函数可以将对象转换为JSON字符串...
JSON.stringify({ 'page': '100AAAAAf00' }) // => '{ "page": "100AAAAAf00" }'
反过来......
JSON.parse('{ "page": "100AAAAAf00" }') // => { page: '100AAAAAf00' }
答案 2 :(得分:1)