Javascript jQuery Ajax.html()就绪请求

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,

我使用jQueryAjax加载内容,并使用.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)对我来说很好,但我想这不是正确的方法


提前感谢

正如我所看到的,您的代码有几个问题

首先,当数据计算结果为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函数可能有故障!但是就像我说的,有一点超时,它工作,这意味着它不工作。正确的?