javascript - 循环中的$.post()在循环结束才开始执行回调函数
伊谢尔伦
伊谢尔伦 2017-04-11 13:02:26
0
3
570
//先上代码

var status = 0;               //1.先在js文件定义了一个全局变量

for(){                        //这里有个循环
    test(time);                   //循环体里面调用test()方法
    console.log(status);      //输出status
}

function test(time) {         //2执行test()
    var data = '{}';            //这些数据我没给他显示出来
    submitJsonp("post", data, url, getDetails);//把参数传到submitJsonp 调用ajax
}

function getDetails(res) {
    alert("1");
}
     
function submitJsonp(_type, _data, _url, _method) {        //3.执行submitJsonp()方法
    console.log(_data)
    if (_type == "get")
        $.get(_url, JSON.parse(_data), function (data, state) {
                _method(data)
            }
        )
    else {
        $.post(_url, JSON.parse(_data), function (data, state) {   
        //4.方法执行这的时候就跳过去了, 直接去执行for循环里面的console.log(status);    
        //下面的_method(data)都还没调用,因此没进入getDetails()方法。
        //等循环完了,才开始执行getDetails()方法,一样执行7遍
        //以前也是调用submitJsonp这个方法的,可能是没有在循环中执行过,没遇到这种情况
        //求帮忙。。。
                alert("1");
                _method(data);
            }
        )
    }
}
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

reply all(3)
巴扎黑

先说下基础

$.post() 是异步的。jQuery 中这个方法返回的是一个 promise 对象,它有三个方法注册回调

.done(callback),在 post 成功之后调用,callback(data) 的参数就是后端返回出来的内容。

.fail(callback),在 post 失败的时候调用

.always(callback),不管成功失败都会调用。

以上三个方法可以注册无限个回调处理函数。

然后

然后就要看你的业务情况了,你是需要 post 若干次,等所有的数据回来一起处理(并发)呢,还是说有若干次 post,一个完了才能进行下一个(顺序)

并发的情况

$.when(
    $.post(url1),
    $.post(url2),
    $.post(url3),
    $.post(url4)
).done(function(r1, r2, r3, r4) {
    // do something
});

顺序的情况

$.post(url1).then(function(r1) {
    return $.post(url2, { v: r1 });
}).then(function(r2) {
    return $.post(url3, { v: r2 });
}).then(function(r3) {
    return $.post(url4, { v: r3 });
}).then(function(r4) {
    console.log("all done");
});
洪涛

你这是ajax, ajax是异步的,你这里 function(data,state){} 是回调,没有执行完网络请求之前,肯定是不会执行这里的代码。

http://api.jquery.com/jQuery....

伊谢尔伦

可以改为$.ajax,然后将异步改为同步
或者是ajaxStart中设置为同步

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template