【发布时间】:2015-07-29 14:19:22
【问题描述】:
我正在尝试将现有的 jquery Ajax 请求转换为使用 Angularjs Promises。我无法弄清楚如何在我的承诺中包含失败条件。除了其余的东西工作正常。
之前我有我的 jquery Ajax 调用,如下所示。在这里,当我在会话超时等情况下制作 Ajax 时,我使用了在 ajaxSissionTimeOutHandler() 中定义的获取警报消息。
function getUserList() {
$.ajax({
async: false,
url: "oar3ajax.do",
type: "POST",
data: {
action: 'getUserDetails',
postMessage : parameterToSend,
lanes : filterCrtArg.subs
},
dataType: "json"
}).done(function(originalRequest) {
var res = originalRequest;
if (res == null) {
alert("Sorry...There was an error retrieving the Data.");
}
if (res.ResultSet.status == 'failure') {
alert(res.ResultSet.error);
} else {
/* Code to be Executed */
}
}).fail(function(jqXHR, textStatus) {
ajaxSissionTimeOutHandler();
});
}
function ajaxSissionTimeOutHandler() {
alert("You have been logged out due to inactivity");
window.location = "/";
}
以下是我使用 Promises 转换后的代码:
在 services.js 中:
this.getUserDetails = function() {
var originalRequest = $.ajax({
async: false,
url: "oar3ajax.do",
type: "POST",
data: {
action: "getUserDetails"
},
dataType: "json"
});
return $q.when(originalRequest).then(function(res) {
if (res.ResultSet.error) {
return $q.reject(res.ResultSet.error);
} else {
return res.ResultSet.Response;
}
});
在 controller.js 中:
var userPromise = DataService.getUserDetails();
userPromise.then(function(data) {
var indataToRefresh = data.tabDetails[0].columns;
}, function(error) {
alert(error);
});
在这里,当我在会话超时等情况下进行 Ajax 调用时,我希望获得类似于 ajaxSissionTimeOutHandler() 中定义的警报消息。我该如何定义它?
【问题讨论】:
-
你正在混合这两个世界。使用
$http服务而不是 $.ajax
标签: jquery ajax angularjs angularjs-service angular-promise