2010-04-25 123 views
1

当用户刷新页面时,将调用defaultView(),这会加载一些UI元素。 $.address.change()应该在defaultView()完成时执行,但这不会一直发生。 $.address.change()不能在success:回调中,因为它被应用程序用于跟踪URL更改。等待函数在执行完之前完成

defaultView(); 

function defaultView() { 
    $('#tout').fadeOut('normal', function() { 
     $.ajax({ 
      url: "functions.php", 
      type: "GET", 
      data: "defaultview=true", 
      async: false, 
      success: function (response) { 
       $('#tout').html(response).fadeIn('normal'); 
      } 
     }); 
    }); 
} 

$.address.change(function(hash) { 
    hash = hash.value; 
    getPage(hash); 
}); 

我手足无措,如何使$.address.change()等待defaultView()完成。任何帮助,将不胜感激。

+0

上发布了类似问题的答案您不能这样做。这里有两个异步事件:#tout的fadeOut和AJAX请求。同步AJAX请求是我能想到的最不可取的一段Javascript代码。这样做的唯一方法是将'$ .address.change()'放入AJAX请求的成功回调中,因此需要另一种方法。 – Matt 2010-04-25 22:11:48

+0

'异步:错误,'有错误 - 我试着如何影响脚本。没有任何区别,我删除了它。 – Wurlitzer 2010-04-25 22:19:13

回答

3

将它称为successcomplete回调。最好使用delay进行回调计时是不可靠的。您甚至可能需要在success回调中的fadeIn函数回调中拨打电话。

它不必在成功回调中定义,只需执行。这两个上下文仍然可以使用它。

+0

还没有Wurlitzer说“$ .address.change()不能在成功:回调” – ScottE 2010-04-25 22:05:35

+0

亚历克斯,$ .address.change()不能在成功回调,悲伤。它是这个插件的一部分:http://www.asual.com/jquery/address/每次点击一个链接都会跟踪哈希值的变化。 – Wurlitzer 2010-04-25 22:14:33

+0

这是唯一的解决方案。这是异步编程101.你应该使用更新的哈希历史插件,如jQuery的烧烤。即使有地址,您也可以拨打该回拨中的地址更改。只需编写它的代码... – 2010-04-25 22:47:04

0

一个选项是通过css隐藏$ .address(我猜这是一个下拉列表),并将其显示在ajax方法的成功回调中。

相关问题