我使用Jquery Ajax加载内容并使用.html()方法将其插入到div中。之后我需要获取加载内容的高度来计算更多大小,但似乎内容最终没有被加载。当我试图获得它的高度它有时工作正常,但另一次我得到一个小高度值。
Ajax加载函数:
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)对我来说很好,但是我认为这不是正确的方法。
提前致谢
答案 0 :(得分:0)
您的代码存在一些问题,我可以看到它......
首先,当数据评估为false时,您在pagenav()
中返回一些内容,这与您在ajax成功回调中已经执行的操作相同。
其次,您通过data.content
将密钥放入变量i
。在该for循环中,检查data.content
中的当前密钥是否具有等于'panelMain'的属性target_id
。如果这是真的,你会以某种方式假设w / e进入面板main将在data.content[0]
=>我相信这应该是data.content[i]
没有?
您的onLoad()
调用位于for循环中,因此可能会多次调用或在for循环结束之前调用....
以下是我认为你想做的事情:
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();
}
}