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);