我试图对AJAX进行三次调用,并向我建议以下内容:
function getData(Code) {
return $.post('/adminA/GetData', { Code: Code }, function (data) {/*etc.*/});
}
getData(0).done(function() {
getData(1).done(function() {
getData(2);
});
});
当我运行代码时,它会给出一个错误,指出getData(0)
未定义。当我像这样运行代码时它运行正常,但数据不按顺序返回:
getData(0);
getData(1);
getData(2);
getData(3);
有谁知道为什么第一个解决方案不起作用。似乎它试图对它不知道的事情执行.done
。
答案 0 :(得分:2)
您发布的代码对我来说很合适。
我在http://jsfiddle.net/alnitak/G8tmp/放了一份副本,然后按要求运作。
您在retrieveData()
中报告了错误,但在您发布的代码中没有此类功能。
答案 1 :(得分:1)
您正在呼叫$.post
,然后在通话结束后尝试定义done
个事件。
我知道这很难看,但我猜测以下内容会起作用:
$.post('/adminA/GetData', { Code: 0 }, function (data) {/*etc.*/}).done(function(){
$.post('/adminA/GetData', { Code: 1 }, function (data) {/*etc.*/}).done(function(){
$.post('/adminA/GetData', { Code: 2 }, function (data) {/*etc.*/}).done(function(){
$.post('/adminA/GetData', { Code: 3 }, function (data) {/*etc.*/});
});
});
});
一些漂亮的重构应该可以帮助你减少这种情况。
答案 2 :(得分:1)
修改函数getData以接收回调函数。像这样:
function getData(Code,done) {
return $.post('/adminA/GetData', { Code: Code }, function (data) {if(typeof(done)=='function') {done();} /*etc.*/});
}
所以后来得到名为sequentely的AJAX就像这样调用它:
getData(0,function() {
getData(1,function() {
getData(2);
});
});