我有一个奇怪的行为,看起来(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);


一个完整的技巧是将您的排序添加到该代码块的末尾。我不确定是否可以提供更好的解决方案,但我想与您分享这一发现。

10-06 04:22
查看更多