我有一个angularjs函数,它调用服务器端URL并获得响应。此服务器端有时会返回xml响应。有时返回博客作为回应。无法预测。如果我将响应类型设置为" blob"在客户端,它正确显示图像。但我无法处理非blob响应,因为xml响应也显示为blob。在网上搜索了很多关于将blob转换为xml的响应(包含xml响应的响应)。但无法找到答案:(
如果我删除了响应类型:" blob",可以处理非blob响应,但无法处理blob响应。
有没有办法在单个方法中处理这两种类型的响应?
这是我获得回复的angularjs代码
$http({
url: apiConstants.BASE_URL + 'login',
method: "POST",
responseType: "blob",
data: {
"Req": req
},
headers: {
'X-Username': aUser,
'X-Password': aPass,
"Content-Type": "application/xml"
},
dataType: "xml"
}).success(function(data, status) {
console.log(data);
}
答案 0 :(得分:3)
如果您可以设置在服务器提供blob和xml响应时在响应中设置Content-Type
标题正确,那么您可以成功使用headers()
回调以相应地处理它们。
$http.post(url, postData)
.then(function(response){
// success callback
var responseType = response.headers('Content-Type');
var actualType = responseType.split(';');
if(actualType[0] === 'application/xml'){
// handle XML files here
}else{
// handle blob files here
}
}, function(error){
// error callback
});
答案 1 :(得分:0)
我通过执行以下更改来解决此问题
$http({
url: apiConstants.BASE_URL + 'login',
method: "POST",
responseType: "blob",
data: {
"Req": req
},
headers: {
'X-Username': aUser,
'X-Password': aPass,
"Content-Type": "application/xml"
},
dataType: "xml"
}).success(function(data, status, headers, config) {
var responseType = headers('Content-Type');
if(responseType === 'application/xml;charset=utf-8'){
alert("xml");
}else{
alert("blob");
}
}