var num;
function getInfo(){
ajax({
...
num = ...; // 拿到num值
});
}
getInfo();
initPagination(num); //动态生成分页
遇到的问题时,initPagination执行的时候,num仍然为undefined,
尝试过通过setTimeout让initPagination之后执行,但是没有生效?
希望达到的目标是:
ajax执行后,拿到num值,然后动态生成分页,请问这个问题如何解决?
把异步方式修改同步
Promise走一个
function getInfo(){
return new Promise(function(resolve, reject){
ajax({
// ...
success: function(suc_data){
resolve(suc_data);
},
error: function(err) {
reject(err);
}
});
});
}
var num;
getInfo().then(function(suc_data){
// num = ...; // get num from suc_data
initPagination(num);
});
话说现在jQuery.ajax
也有promise返回了,但是尽量别用,没别的,就是觉得慎得慌
从 jQuery 1.5 开始,$.ajax()返回的jqXHR对象 实现了 Promise 接口, 使它拥有了 Promise
的所有属性,方法和行为。$.ajax({ url: "http://fiddle.jshell.net/favicon.png", beforeSend: function ( xhr ) { xhr.overrideMimeType("text/plain; charset=x-user-defined"); } }).done(function ( data ) { if( console && console.log ) { console.log("Sample of data:", data.slice(0, 100)); } });
因为你的num是ajax异步取到的,是不能赋值或者返回给其他外部的函数或者变量的。你可以吧分页的函数放在ajax内部实现。
主要原因是ajax是异步调用。所以方法有两个:
1.将对于数据的操作放在ajax的回调函数里。
2.将ajax的异步方式关闭。即:async:false
ajax是异步调用的~~~
//动态生成分页
function initPagination(num){
}
function getInfo(successback){
ajax({
...
...
success:function(data){
// 拿到num值
successback(data);
}
});
}
getInfo(initPagination);