google.setOnLoadCallback с jQuery $ (document) .ready (), можно ли смешивать? - PullRequest
56 голосов
/ 17 февраля 2009

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

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

Ответы [ 4 ]

68 голосов
/ 17 февраля 2009

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

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

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

49 голосов
/ 04 октября 2012

Извините, что поднимаю это из мертвых, но 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

6 голосов
/ 12 ноября 2011

Если ваш код 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 голосов
/ 04 июня 2014

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

Это:

google.setOnLoadCallback(chartEnrollment);

1012 * становится *

$(document).ready(chartEnrollment);
...