在启动JavaScript函数之前等待

时间:2014-10-27 05:18:21

标签: javascript php jquery html ajax

每次用户收到新通知时,我都会尝试播放声音。我在页面上加载通知的方式很简单:

(function($)
{
    $(document).ready(function()
    {

        var $container = $("#noti");
        $container.load("notify.php");
        var refreshId = setInterval(function()
        {
            $container.load('notify.php');
        }, 1000);
    });
})(jQuery);

这可以通过使用PHP代码发出的任何数字更新div容器来实现。它每秒重试一次(可能不是最有效的方式,但它有效)。

我有另一段代码检查div内容何时更改,然后创建一个警告框(我将更改为在脚本完成后播放声音):

var myElement = document.getElementById('noti');
if(window.addEventListener) {
   // Normal browsers
   myElement.addEventListener('DOMSubtreeModified', contentChanged, false);
} else
   if(window.attachEvent) {
      // IE
      myElement.attachEvent('DOMSubtreeModified', contentChanged);
   }

function contentChanged() {
   // this function will run each time the content of the DIV changes
         alert("js is working");

}

此脚本有效,但它也会创建警报或首次加载通知。这是因为它以空div开始,然后加载数据,从而引发此警报脚本。我可以考虑绕过这个问题的唯一方法是在AJAX脚本完成业务的同时将脚本延迟加载几秒钟。

有没有人知道我可以延迟第二个脚本在页面加载后的前几秒做任何事情,或者更好的方法绕过这个?

1 个答案:

答案 0 :(得分:0)

使用您在加载完成时触发的自定义事件,而不是这样做:

var refreshId = setInterval(reloadContainer, 1000)
function reloadContainer() {
    $container.load('notify.php', function success() {
        $container.trigger('loaded')
    })
}
$(myElement).on('loaded', contentChanged)