我有一个奇怪的行为,看起来(a)同步方法调用有问题吗?!?
我不确定!
一个函数使用getJSON接收数据,对这些数据进行后期处理,然后将它们添加到表中,该表可以由table-sorter插件(http://tablesorter.com/)进行排序。
这里是部分代码。一个函数通过getJSON接收数据:
jQuery.getJSON(url,{},function(data)
{
success:{ ....
在成功块中,将在for-each循环中处理数据。在该for-each循环中,每个JSON元素都将被操作(doSomething())并添加到HTML表中:
success:{ [some-code]
$.each (data.words, function (i,n)
{result=doSomething(n);
obj=jQuery('#Template').clone().appendTo('#table');
obj.html(result);
}
最后,在那之后,我必须更新Table-sorter -extension并开始新的排序:
jQuery("#table").trigger("update");
$("#table").trigger("sorton",[[[1,1]]]);
}; //end of "success
此代码已简化。问题是,如果我启动此功能延迟
$("#table").trigger("sorton",[[[1,1]]]);
,则setTimeout('$("#trends").trigger("sorton",[[[1,1]]]);',20);
仅能正常工作。我认为,输出
obj.html(result);
将是异步的。因此,如果我在不使用setTimeout
的情况下启动排序器功能,则排序器功能在运行时找不到任何数据。有没有办法使成功障碍线性化?
谢谢您的任何帮助!!
最佳答案
如果查看表排序器的源,则更新事件中包含setTimeout
,这很可能是影响您对表进行排序的调用的原因。
$this.bind("update", function () {
var me = this;
setTimeout(function () {
// rebuild parsers.
me.config.parsers = buildParserCache(
me, $headers);
// rebuild the cache map
cache = buildCache(me);
}, 1);
一个完整的技巧是将您的排序添加到该代码块的末尾。我不确定是否可以提供更好的解决方案,但我想与您分享这一发现。