【问题标题】:Method not called in correct order / asyncronous method方法未按正确顺序/异步方法调用
【发布时间】:2012-05-24 21:04:39
【问题描述】:

当我尝试按此顺序加载这些函数时,我遇到了问题: 顺便说一句,我正在使用 Datatables 和 jQuery,我相信你们中的许多人可能已经知道了。

currPage = LookupPts.oTable.fnPagingInfo();
LookupPts.oTable.fnReloadAjax();
LookupPts.oTable.fnPageChange(currPage.iPage);

当我尝试在 fnReloadAjax() 之后立即运行 fnPageChange() 时失败 由于异步fnReloadAjax,我知道这是一个时间问题, 我的问题是,当fnReloadAjax 完成时,如何调用fnPageChange

【问题讨论】:

    标签: javascript jquery ajax datatables jquery-events


    【解决方案1】:

    好的,我搞定了。

    在我发布我的问题之前,我尝试了与你们所有人描述的相同的方法,但我仍然遇到了同样的问题。由于某种原因,它不起作用。

    我必须做些什么来修复它?

    调试插件后发现参数的顺序不正确。插件的参数有:oSettings、sNewSource、bStandingRedraw、fnCallback。

    我注意到在调用该方法时我的参数顺序不正确。我的顺序是 oSettings = object,nNewSource = null,fnCallback = null,bStandingRedraw = function。

    诀窍是像这样以正确的顺序放置参数,回调在参数列表中排在第二位:

                            currPage = LookupPts.oTable.fnPagingInfo();
                            LookupPts.oTable.fnReloadAjax(null, function(){
                               LookupPts.oTable.fnPageChange(currPage.iPage);
                               console.log("finished loading the page details");
                            }, null);
    

    我对第一个参数 oSettings 感到困惑。顺便说一句,第一个参数如何加载对象? 谢谢大家!

    【讨论】:

      【解决方案2】:

      plugin documentationfnReloadAjax()有这个签名:

      fnReloadAjax = 函数 (oSettings, sNewSource, fnCallback, bStandingRedraw) { }

      因此,您可以将回调函数作为第三个参数传递,以便在 AJAX 调用完成时执行。试试这个:

      currPage = LookupPts.oTable.fnPagingInfo();
      LookupPts.oTable.fnReloadAjax(null, null, function() { 
          LookupPts.oTable.fnPageChange(currPage.iPage);
      });
      

      【讨论】:

        【解决方案3】:

        试试这个:

        currPage = LookupPts.oTable.fnPagingInfo();
        LookupPts.oTable.fnReloadAjax(null, null, function() {
            LookupPts.oTable.fnPageChange(currPage.iPage);
        }
        

        【讨论】:

          【解决方案4】:

          您需要实现回调,因为 Javascript 是一种非阻塞语言,不能逐步执行命令。因此,您需要一个在方法完成后运行的回调。

          我只是查看了 ReloadAjax 方法的定义(我从未使用过这个)。如果我得到了正确的:函数(oSettings,sNewSource,fnCallback,bStandingRedraw))下面的代码应该可以工作:

          currPage = LookupPts.oTable.fnPagingInfo();
          LookupPts.oTable.fnReloadAjax(null, null, function(){
             LookupPts.oTable.fnPageChange(currPage.iPage);
          });
          

          【讨论】:

            猜你喜欢
            • 2021-09-15
            • 1970-01-01
            • 2012-03-15
            • 2019-02-24
            • 2011-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-10
            相关资源
            最近更新 更多