我有一个函数通过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 );
});
我如何找到问题所在的想法?
答案 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
之前附加侦听器。