jquery.post不适用于object literal

时间:2012-10-08 16:33:15

标签: jquery slim

与我$.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?是我的服务器端还是客户端哪个错了?

2 个答案:

答案 0 :(得分:4)

你明白这是错的。传递对象文字将导致jQuery将对象的每个属性作为键并将所有值转换为字符串并将其转换为post参数,其形式为key1=val1&key2=val2。当然,这不是JSON,因此json_decode无声地失败。

答案 1 :(得分:3)

jQuery实际上并没有在PHP脚本中发布“对象文字”。它被转换为查询字符串,并作为POST数据发送,就像您要正常发布表单一样。

您不需要json_decode任何内容,只需阅读$_POST数组,并获取其值。

您的最后两个示例有效,因为您正在发送一个JSON字符串作为POST正文,但您的其他示例将标准查询字符串作为POST正文发送。