2012-02-15 56 views
1

我使用的是淘汰賽,我試圖將信息發送到PHP,使用Firebug檢查網絡 - >頭我有這樣的:PHP接收的Json

Request URL:http://localhost/loyalty/welcome/json/ 
Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:85 
Content-Type:application/json 
Host:localhost 
Origin:http://localhost 
Referer:http://localhost/loyalty/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11 
X-Requested-With:XMLHttpRequest 
Request Payload 
{"friends":[{"name":"name","isOnTwitter":false},{"name":"name","isOnTwitter":false}]} 
Response Headersview source 
Connection:Keep-Alive 
Content-Length:0 
Content-Type:text/html 
Date:Wed, 15 Feb 2012 11:01:23 GMT 
Keep-Alive:timeout=5, max=100 
Server:Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By:PHP/5.3.8 

生成的JSON是:{"friends":[{"name":"name","isOnTwitter":false},{"name":"name","isOnTwitter":false}]},我有不知道如何獲得這些價值。

這裏是Ajax調用:

save: function() { 
     $.ajax({ 
      url:"http://localhost/loyalty/welcome/json/", 
      type: "post", 
      data: ko.toJSON(this), 
      contentType: "application/json", 
      success: function (result) { 
       alert(result); 
      } 
     }); 

在我的笨方法,我試圖用$this->input->post('friends')接受它和其他任何我能想到的和沒有結果。

回答

2

我改變了Javascript來此:

$.ajax({ 
    url:"http://localhost/loyalty/welcome/json/", 
    type: "post", 
    data: {payload:ko.toJSON(this)}, 
    success: function (result) { 
      t.value = result; 
    } 
}); 

然後,在PHP中,你可以通過訪問JSON:

<?php json_decode($_POST["payload"]); ?> 
+0

有想法爲什麼刪除行是問題? – Gerep 2012-02-15 11:45:34

+0

如果您不將'data'參數作爲對象傳遞,而是作爲字符串傳遞,那麼jQuery會假定您已經對其進行了URL編碼,而您並未將其編碼。但是,爲了讀取數據,PHP必須使用變量名進行URL編碼。編寫'data:{payload:ko.toJSON(this)}'告訴jQuery自動對JSON進行URL編碼並將其放入'payload'變量中。 – wecsam 2012-02-16 02:25:50

+2

對不起,我誤解了你的問題。爲了讓PHP讀取數據,您必須使用MIME類型'application/x-www-form-urlencoded'。 jQuery默認使用這個。指定'contentType:「application/json」'覆蓋。 – wecsam 2012-02-16 02:28:40

3

變化

data: ko.toJSON(this), 

data: {mydata : ko.toJSON(this) }, 

在你的文件,而你張貼在http://localhost/loyalty/welcome/json/

它讀成打開了:

$myObj = json_decode($_POST['mydata']); 

,然後你可以訪問你的價值觀是:

echo $myObj['friends'][0]['name']; or echo $myObj['friends'][0]['isOnTwitter']; 

將輸出nametrue/false爲您的JSON代碼讀取。

編輯

這個線程可以幫助你 - >Jquery - How to make $.post() use contentType=application/json?

+0

它我布爾(假)使用笨,使用$ _ POST []它返回我「未定義返回變量:mydata「 – Gerep 2012-02-15 11:20:04

+0

你是否按照我在答案的開頭提到的那樣進行了更改? – linuxeasy 2012-02-15 11:21:03

+0

是的...這裏是新的JSON:mydata = {「friends」:[{「name」:「João」,「isOnTwitter」:false}]}我的php和你的 – Gerep 2012-02-15 11:21:56

1

由於Content-Type是「application/json」而非「application/x-www-form-urlencoded」,所以$ _POST數組將爲空。

因此,爲了訪問POST請求的JSON有效載荷,你必須這樣做:

$json_data = json_decode(trim(file_get_contents('php://input')), true);  
echo($json_data['param1']); 
echo($json_data['param2']);