Javascript处理响应

时间:2015-12-28 04:13:04

标签: javascript angularjs http httpwebresponse

我有一个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);
        }

2 个答案:

答案 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");
            }
    }