2012-05-17 112 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