2016-12-03 43 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”);