0

我有一个通过 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 );
}); 

一个想法我如何去找出问题所在?

4

2 回答 2

2

对于 .ajaxComplete - 您应该将其注册为正在加载的元素上的页面加载的一部分 - 所以

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

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

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

可以直接包含您的 oncomplete 函数,而不是注册事件侦听器。例如

$("#mainc").load(loadUrl, function(){ alert('bob' });
于 2012-09-26T16:00:44.397 回答
0

以下启动异步过程:

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

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

于 2012-09-26T16:06:51.460 回答