2016-12-03 42 views
0

我正在學習phpangular。目前正在探索使用$http服務將數據發送到服務器端的可能性。這是我想出來的,它似乎工作,但它看起來並不高雅。Angular + PHP:發佈對象最簡單的方法?

角碼:

$http({ 
    method: 'POST', 
    url: 'server.php', 
    data: "newUser=" + JSON.stringify(user), 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
    } // set the headers so angular passing info as form data (not request payload) 
}) 
.success(function (respose) { 
    var x = JSON.parse(respose); 
    console.log(JSON.parse(x)); 
}).error(function (err) { 
    console.log(err); 
    console.log("some kind of error"); 
}); 

這是我php代碼來接收數據,並將其返回:

if (isset($_POST["newUser"])) { 
    $newUser = $_POST["newUser"]; 
    echo json_encode($newUser); 
} 
  1. 爲什麼我必須指定json我的名字通過?我的意思是請求的data下的newUser前綴。
  2. 其次,爲什麼我必須爲json.parse兩次響應才能將其轉換回JS對象?
  3. 爲什麼我必須指定標題才能傳遞簡單的JSON字符串?
+0

簡單的序列化數據 – saravanabawa

+0

如果您發回JSON數據添加適當的報頭'標題(「內容類型:應用程序/ JSON」);'這可以幫助其他的庫,自動將其轉換爲JSON – Endless

+0

這可以幫助你:http://stackoverflow.com/questions/18866571/receive-json-post-with-php(然後你不必序列化數據)你可以發送json – Endless

回答

0

Q1。爲什麼我必須指定我傳遞的json的名稱?我的意思是請求數據下的新用戶前綴。

Q3。爲什麼我必須指定標題才能傳遞簡單的JSON字符串?

在PHP中,你有全局數組等$_POST & $_GET接收來自屬於的key=value窗體上的請求提取數據。當使用application/x-www-form-urlencodedmultipart/form-data作爲HTTP內容類型時,和$_POST被填充。

所以爲了使用這些全局數組,你必須完全填補這兩個條件

好的替代方法是使用php://input流直接讀取原始輸入,這樣你就可以直接發送JSON字符串。

file_get_contents(「php://input」);