我的javascript中有以下情况:
我正在使用when
,这样当#2完成后,我可以从#1加载表单值。问题是,看来当不等待成功处理程序完成时,只有ajax调用自身。在继续使用值加载表单之前,我需要等待#2的成功函数完成(因为这是在DOM中创建表单的内容)。
如果我在步骤#2添加alert1
,它就可以了(我猜是因为它正在等待点击警报,并且在那个时候,成功处理程序已经完成。
答案 0 :(得分:3)
在success
回调中使用嵌套函数执行类似的操作:
$.ajax({
url: "somewhere"
success: function(data1){
//Use data1 to determine ajax request #2
$.ajax({
url: "somewhere else"
success: function(data2){
//Do stuff with data1 and data2
}
});
}
});
答案 1 :(得分:1)
你可以使用jQuery promises,即:
var loadingData = $.get(loadDataUrl);
var loadingHtml = $.get(grabHtmlUrl);
$.when(loadingData, loadingHtml).done(function(loadDataResult, loadHtmlResult){
//add the html to the dom
//use data to update the dom as you please
});
注意:$ .get只是执行get请求的$ .ajax版本
来源: http://api.jquery.com/deferred.promise/
http://api.jquery.com/jquery.get/
答案 2 :(得分:1)
您应该使用when
或success
而不是两者。听起来好像(尽管代码示例会更清楚)你将两个独立的监听器连接到ajax调用,但是你只希望一个跟在另一个之后执行。
我要么将两者都推到一个事件中,如:
$.ajax( ... , function(){
// success
// prep stuff here
$.ajax( ... , function(){
// second success
// do final stuff here
});
});
或者在另一个promise中包含ajax调用(这可能需要更多地阅读jQuery promises)。
但是,如果你做了像
这样的事情$.when($.ajax( ... , function(){
// thing a
}).then(function(){
// thing b
});
事情a和b将同时执行,因为它们的设计几乎完全相同。
答案 3 :(得分:0)
迟到回答,但是
更好的方法是使用promises作为designed to be used
的方式伪实现
var promise = $.ajax({
url: url,
data: data
}).done(function (data) {
var result = process(data);
return $.ajax({
url: url,
data: result
});
}).done(function (data) {
// data is the result of second ajax call
});