可能说得有点抽象,先看如下代码:
for (var i=0;i <3;i++){ //这里调用ajax等跟后台交互的操作,交互完后会返回数据,我发现,这里并不能控制,本来应该调用3次后台操作,最终只有一次,这不是我想要的。问题显然出在,我调用后台操作时,循环差不多就结束了。
我想要的是:仅当前一次跟后台交互操作完成后,即返回数据后,后一次循环才接着执行,不知道有没办法做到?请大侠指教。
}
另:我用的是ext4前端技术,普通的js方面做不到,用ext能解决也行。
for (var i=0;i <3;i++){ //这里调用ajax等跟后台交互的操作,交互完后会返回数据,我发现,这里并不能控制,本来应该调用3次后台操作,最终只有一次,这不是我想要的。问题显然出在,我调用后台操作时,循环差不多就结束了。
我想要的是:仅当前一次跟后台交互操作完成后,即返回数据后,后一次循环才接着执行,不知道有没办法做到?请大侠指教。
}
另:我用的是ext4前端技术,普通的js方面做不到,用ext能解决也行。
// ajax request
}这样写不是只调用一次ajax,而是几乎同时发出了3个ajax request,返回的结果视网络情况而定。你可以把代码改成这样
function getData(url){
$.ajax({
url: url,
type: get,
success: function(){
// to do ...
getData(url);
}
});
}
或者是把ajax异步改成同步
是这样子的,我是要实现,同时下载几个文作的操作,
用了:在Ajax返回数据后,我用window.location = url;去实现下载文件的操作。
url地址是后台返回的,本来同时要下载3个文件,最后,发现,永远只是下载最后一个,即i=2时,反台返回的url那个,不知,像我这种情况,要怎么实现同时下载3个文件呢?
function getData(i){
if(i>2)
return;
$.ajax({
url: url,
type: get,
success: function(){
// to do ...
window.location = url;//每次返回时,我执行下载一个文件操作,但我发现,当i=0,1时,根本没执行下载操作,仅当i=2时,执行下载操作,很显然,最终只下载i=2时的那个文件
getData(i+1);
}
});
}
发现,基本上解决了问题了,居然能下载两个文件了,但很奇怪的是,第2个文件没下载下来!
即i=1时的那个文件,没下载,难道是太快了,i=1被i=2那个下载履盖掉了?
for (var i=0;i <3;i++){
(function (lockedInIndex) {
return function (e) {
e.preventDefault();
//lockedInIndex索引
//调用ajax
};
})(i)
}
$.ajax({
url: "url",
async: false, //注意这里
success: function () { //注意这里
success = true
}
});
if (success) { //注意这里
window.open('http://google.com')
}
$.ajax({url:'xxx',success:function(url){window.open(url)}});