$ http标头不是函数 - angularjs

时间:2015-06-15 12:31:15

标签: php angularjs http

我使用SOAP在我的PHP服务器上通过cURL将数据发布到GUID。完成此操作后,它将以HTTP响应标头的形式提供实体$http。尝试通过我的角度工厂和GUID访问此内容时。

我的标题已公开,可以在Chrome开发者工具中查看,并向我提供我需要的 $http({ method: 'POST', url: url, data: formData, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (data, headers) { var array = []; array.data = data; array.headers = headers('EntityId'); console.log(array.headers); deferred.resolve(array); }) return deferred.promise; //etc

访问承诺数据的代码如下:

array.headers = headers;

我得到的错误是:

  

标题不是函数()

但是,我可以使用:

访问某些标题结果,例如状态200代码
margin

但我需要访问我的自定义标题。关于如何实现这一目标的任何想法?

4 个答案:

答案 0 :(得分:4)

根据https://docs.angularjs.org/api/ng/service/$http

的弃用通知
  

$ http遗留承诺方法成功与错误   弃用。请改用标准方法。如果   $ httpProvider.useLegacyPromiseExtensions设置为false然后这些   方法将抛出$ http / legacy错误。

首选方式是:

$http.get('/someUrl')
.then(function(response){
    var array = [];
    array.data = response.data;
    array.headers = response.headers('EntityId');
});

答案 1 :(得分:3)

正如Andy所说,header是成功回调的第三个参数。所以你必须这样做: -

success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  })

我不打算将此作为答案添加,但这样做是因为我想添加标题确实是一个功能。

在我的项目中,我执行了以下操作,并在控制台中看到函数已注销。该函数返回与传递的名称对应的标题项的值,如果没有传递参数,则返回包含所有标题的对象。

login(user) {
    return this.$http.post(this.url, user)
        .success((data, status, headers, config) => {
            console.log(typeof headers, 'headers'); => prints function
            console.log(headers(), 'headers'); => if you don't pass anything, returns an object containing all headers.

            return response;
        });
}

摘录角度代码。

function headersGetter(headers) {
var headersObj;

return function(name) {
if (!headersObj) headersObj =  parseHeaders(headers);

if (name) {
  var value = headersObj[lowercase(name)];
  if (value === void 0) {
    value = null;
  }
  return value;
}

return headersObj;
};

答案 2 :(得分:2)

您成功的参数不正确。 headers是第三个参数。

$http.get('/someUrl').
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  }).
  error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

选中https://docs.angularjs.org/api/ng/service/$http中的“使用情况”部分以供参考。

答案 3 :(得分:0)

$ http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回一个promise。

The response object has these properties:

data - {string | Object} - 使用转换函数转换的响应体。

  • 状态 - {number} - 响应的HTTP状态代码。
  • 标题 - {function([headerName])} - 标头获取功能。
  • config - {Object} - 用于生成请求的配置对象。
  • statusText - {string} - 响应的HTTP状态文本。

Angular版本== 1.3.5 ,假设在身份验证后,Application Security类中的标头值已设置为“X-AUTH-TOKEN =' eyJwYXNzd29yZCI6ImFkbWlu '”。< / p>

$scope.postData = "{\"username\" : username , \"password\": password ,\"email\" :email}";

$http({
            method: 'POST',
            url: '/API/authenticate',
            data: postData,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
                "X-Login-Ajax-call": 'true'
            }
        })
        .then(function(response) {
            if (response.data == 'ok') {
                $cookies['X-AUTH-TOKEN']=response.headers('X-AUTH-TOKEN');
                // below put,put,putObject Cookies value is valid for Angular version >= 1.4
                // $cookies.putObject('X-AUTH-TOKEN',response.headers('X-AUTH-TOKEN'); 
                window.location.replace('/');
            }
            else {

                // Error Message...
            }
        });