我使用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
但我需要访问我的自定义标题。关于如何实现这一目标的任何想法?
答案 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} - 使用转换函数转换的响应体。
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...
}
});