2012-05-17 75 views
0

这可能看起来像一个不寻常json问题,但我可以向你保证我找不到我的问题的答案。在PHP中获取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> 

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

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

使用'的print_r($ _ POST);',看看哪些字段名携带有效载荷,如果有的话。它不仅仅显示为带有原始数据的'$ _POST'。它会是'json_decode($ _ POST [“varname”])'(例如'“id”',但这是你的问题),或者可能驻留在'php:// input'中。 – mario

回答

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

感谢您的回应。我试过'$ modelData = json_decode(file_get_contents('php:// input')); echo“Name:”。$ modelData-> name;'但它不起作用 – Ali

+0

尝试'var_dump($ modelData);'它可能与你期望的不同。也尝试'var_dump(file_get_contents('php:// input'))'看看你是否得到任何东西 –

+0

它打印'NULL' – Ali

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

+0

非常感谢这个想法。这似乎对我来说也很合理,因此我试过了:'$ modelData = json_decode($ _ POST ['model']); echo“Name:”。$ modelData-> name;'但是没有工作 – Ali

+1

你的$ _POST变量的print_r给你什么? – Gohn67

+0

它打印1,现在我可以得到一个类型'数组 ( [model] => {\“name \”:\“John \”,\“age \”:10} )'@Kamil Szot's解决方案 – Ali