0

与我做的$.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)

例如

$.post('http://...', {name:'test'}, function(data) {...});

我的 php 休息功能:

function postContact(...) {
    $request = Slim::getInstance()->request();
    $body= json_decode($request->getBody());
    print_r($body);
}

为什么我不能使用 jQuery API 中描述的对象文字?是我的服务器端还是客户端出错了?

4

2 回答 2

4

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

于 2012-10-08T16:44:15.250 回答
3

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

你不需要json_decode任何东西,你只需要读取$_POST数组并获取它的值。

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

于 2012-10-08T16:44:06.297 回答