[英]Angular $http always returning null data from PHP API
我正在尝试使用我的开发人员为我创建的登录API。
$http({
method: 'POST',
url: "http://example.com/api/userLogin",
data: $.param(postLoginData),
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
responseType: 'json'
}).then(function(loginData) {
console.log(loginData);
});
我的console.log()
始终记录以下内容:
Object {data: null, status: 200, config: Object, statusText: "OK"}
然而,当我进入开发人员工具中的“ Network
选项卡时,我可以看到响应实际上是以下内容:
我不是后端开发人员,所以在响应开始时我对这个0
感到有点困惑。 然后我尝试进一步研究这个并查看PHP API代码本身,并发现返回的curl_exec($loginCurl)
的响应是:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Mon, 09 May 2016 02:10:35 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Cache-Control: no-cache
Content-Length: 43
Content-Type: application/json
{"id":"16","username":"user4","status":200}
响应的body
是有效的JSON,所以不太确定为什么Angular会返回null数据,即使我可以在开发人员工具中成功看到响应...
编辑:
我的API包含以下内容以执行检查和创建会话:
$jsonResults = json_decode($body, true);
if($jsonResults != NULL || $jsonResults->id != NULL) {
//Successfully logged in
$_SESSION['user_name'] = $jsonResults->username;
$_SESSION['user_login_status'] = 1;
$_SESSION['user_id'] = $jsonResults->id;
$this->response($body, 200);
}
虽然,如果上面的代码只是替换为以下代码,它似乎完全正常:
$this->response($body, 200);
为什么会这样?
问题肯定是服务器端,但您可以使用响应转换器解决它。 例如...
$http.post('http://example.com/api/userLogin', $.param(postLoginData), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
transformResponse: function(data) {
console.log('Raw data', data);
if (angular.isString(data) && data[0] === '0') {
data = data.substring(1);
}
return angular.fromJson(data);
}
}).then(function(response) {
console.log(response);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.