如果我有一个API服务器,那么API将发送带有JSON格式的ajax数据:
{"status":304,"message":"Cannot delete data where PK is empty or > 1"}
如何在AngularJS $ http后调用状态和消息来提醒bootbox? 这里是我的AngularJS $ http帖子
$http({
method: "POST",
url: apiUrl('disable_assethw'),
data: {
id: id
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).then(function successCallback(response) {
if(response.status == 304) {
bootbox.alert("Something went error.." + response.data.message);
} else {
$scope.getAssetHW();
}
}, function errorCallback(response) {
bootbox.alert("Something went error.." + response.status);
});
感谢您的建议。
答案 0 :(得分:0)
你说它是 json 响应而你使用了: application / x-www-form-urlencoded ,这是错误的。
处理rest / api调用的最佳做法是:
创建一个可在整个应用程序中访问的公共/通用函数,它将管理你的post api调用(添加对回调的api响应):
[1]: http://jsfiddle.net/3xa69njt/2/
在需要的地方(在组件或服务中)调用此函数:
postAPICall(url, body, data) {
let headers = new Headers({'Content-Type': 'application/json'});
this.http
.post(url,
body, {
headers: headers
})
.map(
response => response.json())
.subscribe(
response => {
data(response);
},
err => data(this.handleError(err)); //handle error here
);
}
错误处理函数:
var yourJSONBody = {
"param-1": "",
"param-2": "",
//....
}
}
this.myCommonService.postAPICall("localhost:8080/app/", yourJSONBody, data => {
if (data.status == "304") {
//do stuff
//this.msgs.push({severity: 'error', detail: data.message});
}
else {
//do stuff
}
});
答案 1 :(得分:0)
使用JavaScript对象作为数据执行POST请求时,请使用AngularJS默认内容类型(自动设置为application/json
)。 $http service还会自动将JavaScript对象编码为JSON strings。
成功处理程序仅处理状态在200-299范围内的响应。范围之外的状态由拒绝处理程序处理:
$http({
method: "POST",
url: apiUrl('disable_assethw'),
data: {
id: id
},
headers: {
̶'̶C̶o̶n̶t̶e̶n̶t̶-̶T̶y̶p̶e̶'̶:̶ ̶'̶a̶p̶p̶l̶i̶c̶a̶t̶i̶o̶n̶/̶x̶-̶w̶w̶w̶-̶f̶o̶r̶m̶-̶u̶r̶l̶e̶n̶c̶o̶d̶e̶d̶'̶
}
}).then(function successCallback(response) {
̶i̶f̶(̶r̶e̶s̶p̶o̶n̶s̶e̶.̶s̶t̶a̶t̶u̶s̶ ̶=̶=̶ ̶3̶0̶4̶)̶ ̶{̶
̶b̶o̶o̶t̶b̶o̶x̶.̶a̶l̶e̶r̶t̶(̶"̶S̶o̶m̶e̶t̶h̶i̶n̶g̶ ̶w̶e̶n̶t̶ ̶e̶r̶r̶o̶r̶.̶.̶"̶ ̶+̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶.̶d̶a̶t̶a̶.̶m̶e̶s̶s̶a̶g̶e̶)̶;̶
̶}̶ ̶e̶l̶s̶e̶ ̶{̶
$scope.getAssetHW();
̶}̶
}, function errorCallback(response) {
//HANDLE 304 status HERE
if(response.status == 304) {
bootbox.alert("Something went error.." + response.data.message);
} else {
bootbox.alert("Something went error.." + response.status);
};
});
来自文档:
200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。任何超出该范围的响应状态代码都被视为错误状态,并将导致调用错误回调。此外,小于-1的状态代码归一化为零。 -1通常表示请求已中止。
注意:状态为-1通常表示浏览器拒绝了CORS problem违反same-origin policy的请求。