我正在从jquery $ .ajax切换到正常工作,使用AngularJS $ http.put来访问一个安静的API。
我可以进行API调用,但PUT数据没有被发送 - 所以我的API看到一个带有空数据对象的PUT请求,该数据对象应该包含一个JSON字符串 - > data.values = 'a json structure'
$http.put(
$rootScope.api_url,
{
values: jsonifiedValues
},
{
headers: {
apihash: sha256hash
}
}).success(function(data,status,headers,config){
// handle success
}).error(function(data,status,headers,config) {
// handle failure
});
之前我没有使用AngularJS的$ http,但是当我在PHP api中转储数据时,它只是空的。这就是我如何从PHP中的请求中提取它:
parse_str(file_get_contents('php://input'), $put_vars);
$arr_req_data = $put_vars['values'];
在我的API中,如果请求发送的apihash与PUT值上构建的sha256哈希不匹配,则会失败。
这是在JQuery中工作,只是失败现在我已切换到$ http。我不确定为什么PUT数据似乎是空的。
答案 0 :(得分:1)
file_get_contents('php://input')
的返回值将是一个JSON字符串(前提是所有内容都已发送),因此parse_str
不是处理该数据的正确函数。
而是使用json_decode
。
此外,无需发送 jsonified值,只会使事情变得更复杂,因为您必须使用json_decode
两次。