Ajax完成后调整框架大小

时间:2013-06-06 23:00:24

标签: jquery iframe javascript-events

我正在尝试在加载内容后调整iframe的大小。页面(加载到iframe中)有一些控件使它将加法信息加载到页面底部,它通过JQuery的$ .ajax()方法完成。

我尝试过使用$(document).ajaxComplete(),但最终会在$ .ajax()方法成功事件之前注册。我想要做的是在成功事件之后注册一个事件。

例如:

<script type='text/javascript'>
$(document).ready(function(){
    resizeIframe();
    $(document).ajaxComplete("resizeIframe");
    $(document).load("resizeIframe");

});

function resizeIframe()
{
    $(window).parent().height($("body").height());
    $(window).scrollTop(0);
}
</script>

这适用于静态加载的页面。但是,如果我有这样的事情:

<script type='text/javascript'>
    $("someObject").on('click', function (){
       $.ajax({
            type: 'post',
            url: 'someurl.php',
            success: function(data) 
            {
                 $("body").append(data);
            }
       });
    });
</script>

然后在.ajax成功函数之前调用resizeIframe(意味着dom不包含那些添加元素,因此页面的高度错误。我想避免向每个ajax添加resizeIframe我打电话,是否有可以用来解决这个问题的事件?

更新

我试过这个:

$(document).ready(function(){
    resizeIframe();
    $(document).load(function(){ resizeIframe();});
    $(document).ajaxComplete(function(){
            setTimeout(resizeIframe, 0);
    });
});

它似乎在Firefox 21中工作。但是,它在IE10中不起作用(我必须向后兼容IE8)。

1 个答案:

答案 0 :(得分:2)

本地活动将始终在全球活动之前执行(本地成功 - &gt;全球成功 - &gt;本地完成 - &gt;全局完成)。您可以设置全局success事件:

$(document).ajaxSuccess("resizeIframe");

API参考:http://api.jquery.com/ajaxSuccess/

然后指定本地complete事件:

url: 'someurl.php',
complete: function(data) 
{
    $("body").append(data);
}

请注意,只要AJAX调用完成,就会运行complete函数。