function processData(data) {
//some processing
return data;
}
function test() {
$.ajax({
'url': api1,
'data': {
'use': "200"
},
'dataType': 'json'
}).done(function (data) {
$.ajax({
'url': api2,
'data': {
'use': data.ud;
},
'dataType': 'json'
}).done(function (data) {
processData(data);
});
});
return;
}
function main() {
test.done(function (data) {
parse(data);
});
}
我想等到在返回之前在test()中嵌套ajax完成。 aync = false是一种方式,但有些人认为这不是一个好选择。什么可以是它的好方法。
1)一个ajax的结果在其他调用中用作输入,所以当()不能用于执行并行调用时
2)返回将在第二个ajax完成之前执行,并执行其回调。肯定2ned ajax回调将被执行但在返回该测试之前并且从main调用它的完成。
答案 0 :(得分:0)
您可以使用jQuery.when()。
描述:提供一种基于一个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。
答案 1 :(得分:0)
您需要从测试中返回ajax
来电并使用已完成的电话。
function test() {
$.ajax({
'url': api1,
'data': {
'use': "200"
},
'dataType': 'json'
}).done(function (data) {
return $.ajax({
'url': api2,
'data': {
'use': data.ud;
},
'dataType': 'json'
});
});
}
function main() {
test.done(function (data) {
processData(data);
parse(data);
});
}
答案 2 :(得分:0)
async: false
是个坏主意,因为ajax并不意味着阻止。没有async: false
,你无法阻止函数返回。更好的解决方案是使用Deferred
对象。您可以像这样改进代码。
function processData(data) {
return data;
}
function test() {
// what is being returned here is a deferred object
// see http://api.jquery.com/deferred.then/
return $.ajax().then(function (data) {
return $.ajax().then(function (data) {
return processData(data);
});
});
}
function main() {
// you can't stop test from returning, but you can used the return Deferred object
test().done(function (finalData) {
// processData(data) in test will be available as `finalData` here
});
}
答案 3 :(得分:0)
我建议你试试我创建的这个jQuery插件。 我希望它可以使ajax调用链更容易。 jQuery.chain
$.chain(ajaxfunc,parse, processData).then(success, failure);
你可以找到演示here