Google.setOnLoadCallback с jQuery $(document).ready(), нормально ли смешивать?

Я использую API Google Ajax и предлагаю использовать google.setOnLoadCallback() различные вещи, связанные с их API, но я также использую jQuery $(document).ready() для выполнения других вещей JS, не связанных с Google API.

Можно ли смешать эти два подхода в одном документе? Я еще не заметил никаких проблем, но я полагаю, что это вопрос масштаба.

Ответ 1

Вы в значительной степени должны это сделать:

google.setOnLoadCallback(function() {
  $(function() {
    // init my stuff
  });
});

Вы не можете сделать $(document).ready() без $ (объект jQuery), доступный, так что он должен войти в обратный вызов. И вы не можете быть уверены, что документ готов в обратном вызове, поэтому вам также нужно сделать ready().

Ответ 2

Извините, что вы поднимаете это из мертвых, но 1) Он по-прежнему появляется как "ответ" на эту проблему и 2) я нашел лучшее решение.

В функции google.load имеется необязательный третий аргумент, который принимает объект параметров конфигурации. Один из вариантов: callback. Это также избавляет от необходимости отдельного вызова setOnLoadCallback.

например.

google.load('visualization', '1.0', {
    'packages': "charttype", 
    'callback': $jQ.proxy(me.setupChart, me)
});

Итак:

<script src="https://www.google.com/jsapi"></script>
<script>
$(document).ready(function () {
    function mapsLoaded() {
        etc etc etc
    }

    google.load("maps", "2", {"callback" : mapsLoaded});
});
</script>

См: https://developers.google.com/loader/#Dynamic

Ответ 3

Если ваш код JavaScript находится в собственном файле js, а не внутри документа HTML, вы также можете сделать это в документе:

<script>
        google.load("jquery", "1.7.0");
        google.load("jqueryui", "1.8.16");
        google.setOnLoadCallback(function() {
             var script = document.createElement("script");
             script.setAttribute("type", "text/javascript");
             script.setAttribute("src", "my.js");
             document.getElementsByTagName("html")[0].appendChild(script);
        });
</script>

Загружает my.js после загрузки всех других вещей из Google. В файле my.js вы можете сделать $(document).ready(...). Таким образом, ваш код приложения не зависит от "загружается Google" или "загружается непосредственно с вашего сервера".

Ответ 4

Зачем смешивать, когда вы можете сделать все это с помощью $(document).ready()? Просто избавьтесь от функции google.setOnLoadCallback и используйте jQuery $(document).ready().

Это:

google.setOnLoadCallback(chartEnrollment);

становится

$(document).ready(chartEnrollment);