用PHP获取Json表单数据

时间:2012-05-17 22:48:19

标签: php javascript json backbone.js

这可能看起来像是一个非常 json 的问题,但我可以向你保证我找不到问题的答案。

在下面的代码示例中,我想得到(可能是解码正在传输的json数据。我已经尝试了 json_decode($ _ POST)。请求类型的方式是 POST 。无论如何,我可以将json数据获取到数组或变量中,所以当我想调用 name age < / b>我会轻易地从请求中检索它们吗?

我正在关注 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>

稍后我使用谷歌浏览器观看网络,我可以清楚地看到数据是以表格数据传递的。以下是Google网络工具的结果;

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

2 个答案:

答案 0 :(得分:2)

如果您将JSON有效负载作为原始发布数据获取,则可以使用以下内容进行读取:

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

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

因为你得到的是:

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']);

答案 1 :(得分:1)

您需要在$ _POST数组的model键上执行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