Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从原型中的ajax请求获取高度_Javascript_Prototypejs - Fatal编程技术网

Javascript 从原型中的ajax请求获取高度

Javascript 从原型中的ajax请求获取高度,javascript,prototypejs,Javascript,Prototypejs,如何在原型中获得AjaxResponse的高度。我需要得到从Ajax返回的元素的高度 new Ajax.Updater('myDiv','myUrl' { parameters: '?something=something', onSuccess: function(transport){ //get height from first div returned }

如何在原型中获得AjaxResponse的高度。我需要得到从Ajax返回的元素的高度

new Ajax.Updater('myDiv','myUrl' {
            parameters: '?something=something',
             onSuccess: function(transport){
            //get height from first div returned        

            }
        });

您必须将元素插入DOM中,然后测量它。最好的办法是在使用完它后将其插入实际位置(因为您使用的是
Ajax.Updater
)。[如果出于某种原因,您想首先测量它,您可以在它后面附加样式
位置:绝对值
,并给它一个大的负值
值(例如,
左:-10000px
),使它离开页面,然后测量它,然后将它移动到您想要的位置(删除大的
,等等。),但要注意大小的变化,因为样式和其他与其在DOM中的位置相关的因素。]

Prototype调用所有常见的Ajax回调,但请注意,
onSuccess
是在执行更新之前调用的。要在之后获得回调,可以使用
onComplete
(但请注意,它也会因失败而被调用),或者从
onSuccess
中使用
setTimeout

给定您的代码和注释“get height from first div returned”,使用
onComplete
如下所示:

onComplete: function() {
    var firstDiv, height;
    firstDiv = $("myDiv").down("div");
    if (firstDiv) {
        height = firstDiv.getHeight();
        // ...
    }
}

如果您更喜欢
onSuccess
+
setTimeout
方法(但请注意,添加元素和测量元素之间的延迟会更长):


据我所知,如果元素不在DOM中,则无法获取其高度,因此需要插入元素,然后测试其高度。高度取决于片段将嵌入的文档,根据全局CSS规则。我最初的回答忽略了一个事实,即在添加元素之前调用
onSuccess
(并使用
success
而不是
onSuccess
;最近jQuery做了太多工作!);我现在已经修好了。我宁愿不要设置超时。它内部工作原理相同,但看起来有点整洁。@clockworkgeek:啊,是的,我忘了这是使用原型的。:-)我也喜欢。谢谢你们的快速回复。正如您所说,我必须将元素插入DOM才能获得高度。@duke:很高兴这有帮助。是的,
Ajax.Updater
会将它插入DOM,但它会在
onSuccess
之后插入。(BTW,如果这个答案回答了你的问题,考虑接受它;细节:
onSuccess: function() {
    setTimeout(function() {
        var firstDiv, height;
        firstDiv = $("myDiv").down("div");
        if (firstDiv) {
            height = firstDiv.getHeight();
            // ...
        }
    }, 0); // Won't really be 0ms, but not much longer
}