получить высоту из запроса AJAX в прототипе - PullRequest
1 голос
/ 04 января 2012

Как я могу получить высоту ajaxreponse в прототипе. Мне нужно получить высоту элемента, возвращаемого из Ajax.

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

            }
        });

1 Ответ

2 голосов
/ 04 января 2012

Вам нужно будет вставить элемент в DOM, а затем измерить его.Лучше всего вставить его там, где он действительно будет, когда вы закончите с ним (что вы делаете, поскольку вы используете Ajax.Updater).[Если по какой-то причине вы хотите сначала измерить его, вы можете сделать это, добавив его со стилем position: absolute и присвоив ему большое отрицательное значение left (например, left: -10000px), чтобы оставить его вне страницы, затемизмерьте его, затем переместите в нужное вам место (удалив большую left и т. д.), но остерегайтесь изменения размера из-за стилей и других факторов, связанных с его положением в DOM.]

Prototype вызывает все обычные обратные вызовы Ajax, но обратите внимание, что onSuccess называется до обновления выполняется.Чтобы получить обратный вызов после , либо используйте onComplete (но учтите, что он также вызывается при сбоях), либо используйте setTimeout из onSuccess.

С учетом вашего кода икомментарий «получить высоту из первого возвращенного div», используя onComplete, будет выглядеть следующим образом:

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

Живой пример

Если вы предпочитаете onSuccess +setTimeout подход (но учтите, что между добавлением элемента и его измерением будет более длительная задержка):

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
}

Живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...