【发布时间】:2016-05-30 01:08:57
【问题描述】:
Angular 新手 - 无法弄清楚这一点。设置授权标头时,$http 调用不会到达服务器。我的功能:
loginHttp: function(name, pw) {
var req = {
method: 'GET',
url: 'http://mywebsite/login',
headers: {
'Authorization': "Basic "+ this.b64EncodeUnicode("user1:pass1")
},
data: { test: 'test' }
}
//$http.defaults.headers.common['Authorization'] = "Basic "+ this.b64EncodeUnicode("user1:pass1");
//$http.defaults.headers.common['Accept'] = "text/html";
$http(req).then(function(resp) {
console.log('Success', resp);
// For JSON responses, resp.data contains the result
}, function(err) {
console.error('ERR', err);
// err.status will contain the status code
} )
},
回复是:
ERR Object { data: null, status: 0, headers: headersGetter/
无需标题或设置其他标题即可正常工作,例如接受:...
任何帮助将不胜感激。
我完整的 LoginService 服务在这里:
.service('LoginService', function($q, $http) {
return {
loginHttp: function(name, pw) {
alert(this.b64EncodeUnicode("teacherb:loops411"))
var req = {
method: 'GET',
url: 'http://mywebsite/login',
headers: {
'Authorization': "Basic "+ this.b64EncodeUnicode("teacherb:loops411")
},
data: { test: 'test' }
}
//$http.defaults.headers.common['Authorization'] = "Basic "+ this.b64EncodeUnicode("teacherb:loops411");
//$http.defaults.headers.common['Accept'] = "text/html";
$http(req).then(function(resp) {
console.log('Success', resp);
// For JSON responses, resp.data contains the result
}, function(err) {
console.error('ERR', err);
// err.status will contain the status code
} )
},
b64EncodeUnicode: function (str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
},
loginUser: function(name, pw) {
var deferred = $q.defer();
var promise = deferred.promise;
if (name == 'user' && pw == 'secret') {
deferred.resolve('Welcome ' + name + '!');
} else {
deferred.reject('Wrong credentials.');
}
promise.success = function(fn) {
promise.then(fn);
return promise;
}
promise.error = function(fn) {
promise.then(null, fn);
return promise;
}
return promise;
}
}
})
【问题讨论】:
-
看起来是 HTTP 访问控制 (CORS) 问题 - 访问跨源 URL 时无法使用 auth 标头。只希望错误消息没有对问题如此难以描述 - 会节省很多时间。
标签: angularjs angularjs-service