//先上代码
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);
}
)
}
}
先说下基础
$.post()
是异步的。jQuery 中这个方法返回的是一个promise
对象,它有三个方法注册回调.done(callback)
,在 post 成功之后调用,callback(data)
的参数就是后端返回出来的内容。.fail(callback)
,在 post 失败的时候调用.always(callback)
,不管成功失败都会调用。以上三个方法可以注册无限个回调处理函数。
然后
然后就要看你的业务情况了,你是需要 post 若干次,等所有的数据回来一起处理(并发)呢,还是说有若干次 post,一个完了才能进行下一个(顺序)
并发的情况
顺序的情况
你这是ajax, ajax是异步的,你这里 function(data,state){} 是回调,没有执行完网络请求之前,肯定是不会执行这里的代码。
http://api.jquery.com/jQuery....
可以改为$.ajax,然后将异步改为同步
或者是ajaxStart中设置为同步