【问题标题】: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);
});