ajax动态分页遇到的问题如何解决?

var num;

function getInfo(){
    ajax({ 
      ...
      num = ...;            // 拿到num值
    });
}
getInfo();

initPagination(num);   //动态生成分页

遇到的问题时,initPagination执行的时候,num仍然为undefined,

尝试过通过setTimeout让initPagination之后执行,但是没有生效?
希望达到的目标是:
ajax执行后,拿到num值,然后动态生成分页,请问这个问题如何解决?

阅读 4.3k
5 个回答

ajax是异步调用的~~~

//动态生成分页
function initPagination(num){

}
function getInfo(successback){
    ajax({ 
      ...
      ...         
      success:function(data){
          // 拿到num值
          successback(data);
      }
    });
}
getInfo(initPagination);

主要原因是ajax是异步调用。所以方法有两个:
1.将对于数据的操作放在ajax的回调函数里。
2.将ajax的异步方式关闭。即:async:false

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内部实现。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进