Можно ли использовать google.setOnLoadCallback несколько раз?

Я создаю сайт с помощью ASP.NET MVC, и у меня есть частичные представления, которые используют jQuery для выполнения различных задач. Я думал о переходе на Google AJAX API и использовании их загрузчика для загрузки jQuery. Однако я заметил, что больше не смогу использовать $(document).ready(), потому что загрузчик Google указывает обратный вызов google.setOnLoadCallback().

Это небольшая проблема для меня, потому что у меня есть $(document).ready() в различных частичных представлениях, потому что они делают разные вещи, специфичные для себя, о которых я не хочу, чтобы родительское представление знало.

Могу ли я указать несколько обратных вызовов и просто поменять местами $(document).ready() на google.setOnLoadCallback(someUniqueCallbackFunction)?

Будет ли это идеальным способом справиться с этой ситуацией или есть что-то другое, что предпочтительнее?


person Joseph    schedule 04.09.2009    source источник
comment
Для этих частичных просмотров вы визуализируете их со страницей или динамически (например, через вкладку ajax)?   -  person jmarnold    schedule 04.09.2009
comment
На обычной странице. На данный момент я не использую AJAX.   -  person Joseph    schedule 05.09.2009


Ответы (3)


Я могу упустить момент, но между вашими пользовательскими элементами управления $(document).ready и google.setOnLoadCallback, о которых я знаю, нет конфликта.

Предполагая, что вы используете google для загрузки jquery, ваш код в $(document).ready не будет работать, пока google не загрузит jquery.

Пока jQuery загружается на вашу главную страницу, не знаю, в чем проблема.

person Tristan Warner-Smith    schedule 05.09.2009
comment
Я попробую это и посмотрю, работает ли это. Я попытался использовать setOnLoadCallback и $(document).ready в том же html-файле на игровой площадке Google API, и мне это не понравилось. Хотя, может быть, у меня все в порядке с пользовательскими элементами управления! - person Joseph; 05.09.2009
comment
Кажется, это работает нормально. У меня есть главный файл, который использует google.load(jquery), а затем в представлении я использую $(document).ready, и он работает нормально! - person Joseph; 05.09.2009

Да, вы можете использовать setOnLoadCallback вместо $(document).ready. Существует недокументированный ВТОРОЙ ПАРАМЕТР (или, по крайней мере, я не могу его найти), который указывает, когда вызывать функцию обратного вызова; возможные значения: "false" (по умолчанию) - при загрузке окна или "true" - при загрузке DOM (DOMContentLoaded). Событие DOM срабатывает после загрузки всей разметки (намного раньше, чем window.load). Событие загрузки окна срабатывает после завершения загрузки всех изображений и скриптов.

// Very similar to $(document).ready()
google.setOnLoadCallback( OnLoad, true );

// Very similar to $(window).load()
// Same as google.setOnLoadCallback( OnLoad, false );
google.setOnLoadCallback( OnLoad );

Да, вы можете использовать setOnLoadCallback несколько раз на одной странице. Это очень важная недокументированная функция AJAX API (недокументированная на момент публикации). Каждый раз, когда вы вызываете setOnLoadCallback, он складывает все функции, которые будут вызываться после загрузки DOM или окна.

person Ryan Wheale    schedule 27.10.2009
comment
Это то, что помогло мне. Я бы хотел, чтобы это было лучше задокументировано. - person mdoar; 02.07.2010
comment
Вы просто сделали мой день. - person Wistar; 04.07.2014
comment
Теперь задокументировано, что setOnLoadCallback можно вызывать несколько раз. - person GSerg; 11.07.2016

Я столкнулся с той же проблемой. У меня есть 2 поиска Google на одной странице и т. Д.

В конце концов я нашел это, и потому что я хотел иметь 2 панели, по существу отображающие результаты поиска Google на одной странице.

google.setOnLoadCallback(LoadGoogleNewsResults);
google.setOnLoadCallback(LoadGoogleNewsResultsForum);

Это сработало для меня :)

Код находится на http://login.debt-line.org.uk, просто нажмите посмотреть источник.

person Adam Coller    schedule 20.07.2010