我在 Angular 服务中有一个 ajax 函数,它根据后端服务检查用户的凭据。我已经大大简化了通话。当我使用 $http 服务发出 AJAX 请求时,promise API 可以正常工作:
function isOnline(){
return $http.get(constants.dataUrl)
.success(function(){return})
.error(function(){return;});
}
function checkCredentials(){
var online = isOnline();
var checkCreds = online.then(function(){
alert("Get succeeded");
},
function(response){
alert("Get did not succeed");
});
return checkCreds;
}
我看到 then 中定义的函数被调用。但是,当我使用 jQuery ajax 方法时,resolve 和 defer 方法似乎不会传播并触发 online.then 中的正确方法。下面的代码不起作用:
function isOnline(){
var defer = $q.defer();
$.ajax({
url: constants.dataUrl,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', basicAuthenticationToken());
},
error: function (xhr, ajaxOptions, thrownError) {
alert("I am not online");
defer.reject("I am not online");
},
success: function (data) {
alert("I am online");
defer.resolve(data);
}
});
return defer.promise;
}
function checkCredentials(){
var online = isOnline();
var checkCreds = online.then(function(){
alert("Get succeeded");
},
function(response){
alert("Get did not succeed");
});
return checkCreds;
}
我不能将 promise API 与普通的 jQuery ajax 方法一起使用吗?我想替换这些调用的原因与似乎不适用于 Angular $http 的复杂 PhoneGap 场景有关。