与我$.post API类似:
$.post('http://...', POST_BODY, function(data) {...});
POST_BODY GIVES ME
{name:'test'} Empty response
{'name':'test'} Empty response
{"name":"test"} Empty response
'{"name":"test"}' stdClass Object([name] => test)
JSON.stringify({"name":"test"}) stdClass Object([name] => test)
e.g。
$.post('http://...', {name:'test'}, function(data) {...});
我的php休息功能:
function postContact(...) {
$request = Slim::getInstance()->request();
$body= json_decode($request->getBody());
print_r($body);
}
为什么我不能像jQuery API中描述的那样使用object literal?是我的服务器端还是客户端哪个错了?
答案 0 :(得分:4)
你明白这是错的。传递对象文字将导致jQuery将对象的每个属性作为键并将所有值转换为字符串并将其转换为post参数,其形式为key1=val1&key2=val2
。当然,这不是JSON,因此json_decode
无声地失败。
答案 1 :(得分:3)
jQuery实际上并没有在PHP脚本中发布“对象文字”。它被转换为查询字符串,并作为POST数据发送,就像您要正常发布表单一样。
您不需要json_decode
任何内容,只需阅读$_POST
数组,并获取其值。
您的最后两个示例有效,因为您正在发送一个JSON字符串作为POST正文,但您的其他示例将标准查询字符串作为POST正文发送。