正在加载AJAX内容,但是没有触发完整的功能

时间:2012-09-26 15:52:38

标签: javascript ajax jquery

我有一个函数通过ajax加载页面内容,本质上是函数,淡出当前内容,用ajax请求的结果替换内容,然后将内容淡化。

我的功能适用于大多数页面,但出于某种原因,某个特定请求正在加载内容,但未调用ajax成功函数意味着内容已加载但仍保持隐藏状态。

这是我的代码,为了诊断的目的,我已经用一个警报替换了ajax成功函数,但这不是在同一页面上运行(但是正在加载ajax内容):

var loadUrl=b_url+page;
        if (History.enabled) {History.pushState({state:2}, page, "/"+page);}
        window.name=page;
        $.ajax({
            cache: false,
            async: false,
            type: "POST",
            url: loadUrl,
            dataType: "html",
            beforeSend: function() {
                 $('.contentarea').animate({
                        'opacity'   : 0
                    }, 180, 'jswing', function(){
                            $('#mainc').hide(350, 'jswing');
                });
             },
            success: function(response) {
                $('#mainc').html(response);
                alert('success')
            },
            failure: function(msg) {
                alert('FAIL');
            }
        });

使用上面的代码,问题页面上没有显示成功或失败消息,但是如果我删除该行:

$('#mainc').html(response);

然后显示成功消息。正在加载的内容是一个html页面,正如我所说,它似乎被加载正常(从它在文档中的意义上)。每个页面栏都可以正常工作,所以我怀疑返回的内容存在一些问题(尽管它加载到文档中很好) - 正在加载的内容是使用codeigniter从一部分内容构建的,所以我想我的问题是如何我开始研究问题所在。我已经尝试在我的文档就绪函数中添加它(已阅读类似的帖子),但它什么也没做:

$(document).ajaxError(function(e, xhr, settings, exception) {
alert('error in: ' + settings.url + ' \n'+'error:\n' + xhr.responseText );
}); 

我如何找到问题所在的想法?

2 个答案:

答案 0 :(得分:2)

对于.ajaxComplete - 您应该将已注册的内容作为加载元素的页面加载的一部分 - 所以

$('#mainc').ajaxComplete(function(){ alert('bob')})

可以是它的事件而不是被埋在.animate函数中。换行:

$("#mainc").load(loadUrl);

可以直接包含你的oncomplete函数,而不是注册事件监听器。 e.g。

$("#mainc").load(loadUrl, function(){ alert('bob' });

答案 1 :(得分:0)

以下内容启动异步过程:

$("#mainc").load(loadUrl);

可以在注册下一行的ajaxComplete侦听器之前完成。您可以在触发load之前附加侦听器。