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

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

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

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

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

4 ответа

Решение

Возможно, я здесь упускаю суть, но нет никакого противоречия между вашим usercontrols $(document).ready и google.setOnLoadCallback, о котором я знаю.

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

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

Да, вы можете использовать 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 или окна.

Я столкнулся с той же проблемой. Я гуглил, у меня на одной странице работает 2 гугл поиска и т.д...

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

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

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

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

Вы можете сделать что-то вроде ниже:

      google.charts.load('current', { 'packages': ['corechart'] });
google.charts.setOnLoadCallback(drawAllCharts);


function drawAllCharts()
{
   chart1();
   chart2();
   ...
}
Другие вопросы по тегам