Javascript 使用$.when执行第一个ajax,然后在$.when()中执行下一个。完成
我知道这已经被问了很多次了,但是我在使用$.when按顺序执行$.ajax时遇到了问题 在下面的示例代码中,我希望在$内运行第一个ajax,然后在$内运行第二个$.ajaxJavascript 使用$.when执行第一个ajax,然后在$.when()中执行下一个。完成,javascript,jquery,ajax,Javascript,Jquery,Ajax,我知道这已经被问了很多次了,但是我在使用$.when按顺序执行$.ajax时遇到了问题 在下面的示例代码中,我希望在$内运行第一个ajax,然后在$内运行第二个$.ajax 当我运行代码时,第二个$.ajax立即执行,而不必等待第一个$.ajax完成。请问,有人能给我指出正确的方向吗?第页有一个很好的例子。下面是一个简短的例子: var api = { flag: $.Deferred(), getFoo: function(callback) { $.when(
当我运行代码时,第二个$.ajax立即执行,而不必等待第一个$.ajax完成。请问,有人能给我指出正确的方向吗?第页有一个很好的例子。下面是一个简短的例子:
var api = {
flag: $.Deferred(),
getFoo: function(callback) {
$.when(this.flag).done(function() {
console.log('getFoo');
});
},
getBar: function() {
console.log('getBar');
this.flag.resolve();
}
}
我们需要返回异步操作的承诺 试试这个:
getFoo: function(callback) {
this.getBar().then(function(){
chrome.storage.local.get(['bar'], function(data) {
// omitted some code here for brevity
$.ajax({
type: 'GET',
url: /api/foo/,
dataType: 'json'
}).done(function(result) {
console.log('success', 'went here!');
}).fail(function(request) {
console.log('failed', 'went here!');
});
});
});
},
getBar: function() {
var deferred = $q.defer();
chrome.storage.local.get(['data1'], function(data) {
if(typeof data['data1'] !== 'undefined') {
// omitted some code here for brevity
$.ajax({
type: 'POST',
url: /api/bar/,
data: data['data1'],
dataType: 'json'
}).done(function(result) {
deferred.resolve(result);
}).fail(function(xhr, status, error) {
deferred.reject(error);
});
}
});
return deferred.promise;
}
$。当期望承诺作为参数时,this.getBar不会返回承诺。。。它不会返回任何东西!
getFoo: function(callback) {
this.getBar().then(function(){
chrome.storage.local.get(['bar'], function(data) {
// omitted some code here for brevity
$.ajax({
type: 'GET',
url: /api/foo/,
dataType: 'json'
}).done(function(result) {
console.log('success', 'went here!');
}).fail(function(request) {
console.log('failed', 'went here!');
});
});
});
},
getBar: function() {
var deferred = $q.defer();
chrome.storage.local.get(['data1'], function(data) {
if(typeof data['data1'] !== 'undefined') {
// omitted some code here for brevity
$.ajax({
type: 'POST',
url: /api/bar/,
data: data['data1'],
dataType: 'json'
}).done(function(result) {
deferred.resolve(result);
}).fail(function(xhr, status, error) {
deferred.reject(error);
});
}
});
return deferred.promise;
}