Javascript jQuery Ajax.html()就绪请求
我使用jQueryAjax加载内容,并使用.html()方法将其插入到div中。之后,我需要得到加载内容的高度,以计算进一步的大小,但似乎内容并没有最终加载。当我试图得到它的高度时,有时效果很好,但另一次我得到了一个很小的高度值 Ajax加载函数:Javascript jQuery Ajax.html()就绪请求,javascript,ajax,json,jquery,Javascript,Ajax,Json,Jquery,我使用jQueryAjax加载内容,并使用.html()方法将其插入到div中。之后,我需要得到加载内容的高度,以计算进一步的大小,但似乎内容并没有最终加载。当我试图得到它的高度时,有时效果很好,但另一次我得到了一个很小的高度值 Ajax加载函数: function loadPage(url,data){ jQuery.ajax({ 'url': url, 'dataType': 'json', 'data': data,
function loadPage(url,data){
jQuery.ajax({
'url': url,
'dataType': 'json',
'data': data,
success: function(data,s,xhdr){ // data, status
if(!data){ return false };
pagenav(data);
}
});
return false;}
function pagenav(data){
if(!data){ return false };
if(typeof(data.content)=="object"){
for(var i in data.content){
if(data.content[i].target_id == 'panelMain'){
jQuery('#panelMain').html(data.content[0].content);
setTimeout(function(){
onLoad();
},0);
}else{
jQuery('#panelFooter').html(data.content[1].content);
}
}
}
}
onLoad函数处理整个高度。我试图在操作新元素之前使用setTimeout方法使DOM完全加载。将超时设置为更大的值(比如500)对我来说很好,但我想这不是正确的方法
提前感谢正如我所看到的,您的代码有几个问题 首先,当数据计算结果为false时,在
pagenav()
中返回一些内容,这与在ajax成功回调中进行的检查相同
其次,您将遍历data.content
将键放入变量i
。在该for循环中,检查data.content
中的当前键是否有一个属性target\u id
等于“panelMain”。如果这是真的,您会想方设法假设w/e进入主面板将在数据中。内容[0]
=>我相信这应该是数据。内容[I]
否
您的onLoad()
调用位于for循环中,因此可能会多次调用in,或者在for循环结束之前调用in
以下是我认为您想要做的:
function loadPage(url, data) {
jQuery.ajax({
'url': url,
'dataType': 'json',
'data': data,
success: function(data, s, xhdr) { // data, status
if (!data) {
return false
};
pagenav(data);
}
});
return false; // mind you this function will always return false since ajax calls are async
}
function pagenav(data) {
if (typeof(data.content) == "object") {
for (var i in data.content) {
jQuery('#' + data.content[i].target_id).html(data.content[i].content);
}
onLoad();
}
}
尝试调用
onLoad()代码>在for循环之后,如果您不重新使用pagenav anwhere else(我认为这很愚蠢,因为它只处理ajax调用的返回,其他什么都不处理),那么您应该将代码放入loadPage function.thx中的success回调中,以获得回复。是的,它应该是[i],我只是为了测试而改变了它。因为在我的情况下[i]只能是0或1,并且0将始终是panelMain,因为1将始终是panelFooter,onLoad不能被触发多次。将onLoad函数移出循环,甚至使用完整的函数,会导致更大的高度问题。我建议我的onLoad函数可能有故障!但是就像我说的,有一点超时,它工作,这意味着它不工作。正确的?