[英]Combine 2 ajax calls into 1 callback
I'm building a Chrome extension and I need to combine 2 separate AJAX calls so that I have 1 callback on success. 我正在构建一个Chrome扩展程序,我需要组合2个单独的AJAX调用,以便在成功时有1个回调。 What is the best way to do that? 最好的方法是什么?
Auth.prototype.updateContact = function(id, contact_obj) {
var self = this,
contact_str = JSON.stringify(contact_obj);
return new RSVP.Promise(function(resolve, reject) {
self.authorize()
.then(function() {
$.ajax({
type: "PUT",
url: self.url + "contacts/" + id,
contentType: "application/json; charset=utf-8",
data: contact_str,
dataType: "json",
success: function(data) {
resolve(data);
},
error: function(jqXHR, textStatus, errorThrown) {
var msg = "updateContact error: request: " + id + " " +
contact_str + " response: " + jqXHR.responseText +
" e=" + JSON.stringify(errorThrown);
sendErrorBackground(msg);
reject(jqXHR);
}
});
});
});
};
Auth.prototype.updateContactList = function(id, list_obj) {
var self = this,
list_str = JSON.stringify(list_obj);
return new RSVP.Promise(function(resolve, reject) {
self.authorize()
.then(function() {
$.ajax({
type: "POST",
url: self.url + "add_lists",
contentType: "application/json; charset=utf-8",
data: list_str,
dataType: "json",
success: function(data) {
resolve(data);
},
error: function(jqXHR, textStatus, errorThrown) {
var msg = "updateContactList error: request: " + id + " " +
list_str + " response: " + jqXHR.responseText +
" e=" + JSON.stringify(errorThrown);
sendErrorBackground(msg);
reject(jqXHR);
}
});
});
});
};
Attempt at using @Saar's suggestion 尝试使用@Saar的建议
Auth.prototype.updateContact = function(id, contact_obj, list_obj) {
var self = this,
contact_str = JSON.stringify(contact_obj),
list_str = JSON.stringify(list_obj);
var promiseA = new RSVP.Promise(function(resolve, reject) {
self.authorize().then(function() {
$.ajax({
type: "PUT",
url: self.url + "contacts/" + id,
contentType: "application/json; charset=utf-8",
data: contact_str,
dataType: "json",
success: function(data) {
return data
}
});
});
});
var promiseB = new RSVP.Promise(function(resolve, reject) {
self.authorize().then(function() {
$.ajax({
type: "POST",
url: self.url + "add_lists",
contentType: "application/json; charset=utf-8",
data: list_str,
dataType: "json",
success: function(data) {
return data
}
});
});
});
$.when(promiseA, promiseB).then(function(resultA, resultB) {
console.log(resultB);
});
};
if your using RSVP promises then you need to use "all" 如果您使用的是RSVP,那么您需要使用“全部”
Auth.prototype.updateContact = function (id, contact_obj, list_obj) {
var self = this,
contact_str = JSON.stringify(contact_obj),
list_str = JSON.stringify(list_obj);
var promiseA = new RSVP.Promise(function (resolve, reject) {
self.authorize().then(function () {
$.ajax({
type: "PUT",
url: self.url + "contacts/" + id,
contentType: "application/json; charset=utf-8",
data: contact_str,
dataType: "json",
success: function (data) {
return data
}
});
});
});
var promiseB = new RSVP.Promise(function (resolve, reject) {
self.authorize().then(function () {
$.ajax({
type: "POST",
url: self.url + "add_lists",
contentType: "application/json; charset=utf-8",
data: list_str,
dataType: "json",
success: function (data) {
return data
}
});
});
});
var promises = [promiseA, promiseB];
RSVP.all(promises).then(function (results) {
// results contains an array of results for the given promises
console.log(results);
}).catch(function (reason) {
// if any of the promises fails.
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.