首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(A)同步方法调用的jQuery问题

(A)同步方法调用的jQuery问题
EN

Stack Overflow用户
提问于 2011-06-29 21:42:55
回答 2查看 654关注 0票数 3

我有一个奇怪的行为,看起来是(A)同步方法调用的问题?!?我没有把握!一个函数使用getJSON接收数据,post处理这些数据,将它们添加到一个表中,该表可以通过表排序插件(http://tablesorter.com/)进行排序。

下面是代码的一些部分。函数通过getJSON接收数据:

代码语言:javascript
运行
复制
jQuery.getJSON(url,{},function(data)
              {
             success:{ ....

在成功块中,数据将在for-each循环中处理。在for-each循环期间,每个JSON元素都将被操作(doSomething())并添加到HTML表中:

代码语言:javascript
运行
复制
success:{ [some-code]
          $.each (data.words, function (i,n) 
                              {result=doSomething(n);
                               obj=jQuery('#Template').clone().appendTo('#table');
                               obj.html(result);
                              }

最后,在for-each之后,我必须更新表排序器-extension并开始新的排序:

代码语言:javascript
运行
复制
         jQuery("#table").trigger("update");
         $("#table").trigger("sorton",[[[1,1]]]);
}; //end of "success

这段代码被简化了。问题是,只有当我启动这个函数延迟setTimeout('$("#trends").trigger("sorton",[[[1,1]]]);',20);时,$("#table").trigger("sorton",[[[1,1]]]);才能正常工作。

我认为,输出obj.html(result);将是异步的。因此,如果我在不使用setTimeout的情况下启动排序函数,则排序函数在运行时将找不到数据。

有没有一种方法可以将成功块线性化?

谢谢你的任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-02 21:29:43

如果查看表排序程序的源代码,就会发现update事件中有一个setTimeout,这很可能是影响您对表进行排序的原因。

代码语言:javascript
运行
复制
$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);

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

票数 2
EN

Stack Overflow用户

发布于 2011-06-29 21:54:32

我想你或多或少解决了你自己的问题。将所有的success:回调代码放在一个函数中,并在success属性中指定该函数。getJSON()调用是异步的,因此当它完成调用时,需要存在一个要调用的函数。

我的意思是,这样做:

代码语言:javascript
运行
复制
success: doSuccess();

而不是这样:

代码语言:javascript
运行
复制
success: function() {}

或者,如果您愿意,也可以使调用同步,请参阅以下内容:Is there a version of $getJSON that doesn't use a call back?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6521607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档