0

这似乎是一个不寻常的json问题,但我可以向您保证,我找不到问题的答案。

在下面的代码示例中,我想获取(可能解码正在传输的 json 数据。我已经尝试过json_decode($_POST)。顺便说一下,请求类型是POST。无论如何我可以将 json 数据获取到一个数组或一个变量,所以当我想调用姓名年龄时,我会很容易地从请求中检索它们?

我正在关注backbone.js教程,这是我的模型;

<script type="text/javascript">
        var URL=Backbone.Model.extend({
            initialize: function()
            {
                console.log("URL has been initialized");
            },
            defaults:{
                name:'not defined',
                age:'not defined'
            },
            urlRoot:"/Backbone/manage.php",
            url:function(){
                var base = this.urlRoot || (this.collection && this.collection.url) || "/";
                console.log("Base has been produced");
                if(this.isNew()) return base;

                return base+"?id="+encodeURIComponent(this.id);
            }
        });

        var url=new URL({name:"John",age:10});
        url.save();
    </script>

后来我使用谷歌浏览器来观看网络,我可以清楚地看到数据是作为表单数据传递的。这是谷歌网络工具中的结果;

model:{"name":"John","age":10}
4

2 回答 2

2

如果您将 JSON 有效负载作为原始发布数据获取,您可以使用以下命令读取它:

json_decode(file_get_contents('php://input'));

$HTTP_RAW_POST_DATA如果 php.ini 设置允许填充该变量,您也可以从中读取它。

因为你得到的是:

model=%7B%22name%22%3A%22John%22%2C%22age%22%3A10%7D

您不能直接将其解码为 JSON,因为它不是有效的 JSON。

所以试试:

parse_str(file_get_contents('php://input'), $post);
$myObject = json_decode($post['model']);
于 2012-05-17T22:59:51.400 回答
1

您需要对model$_POST 数组的键执行 json_decode 。model密钥包含您需要解码的 json 字符串。

$modelData = json_decode($_POST['model']);

然后您可以访问数据,例如$modelData->name$modelData->age

编辑:

尝试将此添加到您的主干设置中:

Backbone.emulateHTTP = true;
Backbone.emulateJSON = true;

这将使你得到application/x-www-form-urlencoded而不是application/json. 这应该会正确填充您的 $_POST 数组。

见这里的解释:http ://documentcloud.github.com/backbone/docs/backbone.html#section-162

于 2012-05-17T22:55:01.683 回答