Это (по умолчанию/официальный) код JavaScript для загрузки комментариев Disqus на веб-страницу:
(КОД №1)
<script type="text/javascript">
var disqus_shortname = 'paulund';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
Насколько я понимаю, код выполняет HTTP-запрос асинхронно; но это не главное.
Дело в том, что мне нужно было внести некоторые изменения в код, чтобы комментарии загружались только тогда, когда пользователь прокручивает вниз до раздела комментариев, например, ленивая загрузка. И у меня есть два рабочих метода для этого.
(КОД №2)
jQuery(document).ready(function($){
$('#comments').waypoint(function () {
var disqus_shortname = 'paulund';
$(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
}, { offset: '100%', triggerOnce: true });
});
(КОД №3)
jQuery(document).ready(function($){
$('#comments').waypoint(function () {
var disqus_shortname = 'paulund';
$.ajax({
type: "GET",
url: "http://" + disqus_shortname + ".disqus.com/embed.js",
dataType: "script",
cache: true
});
}, { offset: '100%', triggerOnce: true });
});
Вопросы:
Помимо того очевидного факта, что сейчас я делаю это с помощью jQuery, есть ли разница между кодами #1 и #2 и #1? strong> и #3? Может быть, я делаю что-то не так, чего мне совершенно не хватает?
Почему коды #2 и #3 не работают при запуске с
$.noConflict();
? (В конце концов, я нашел это и в документации.)
Например, это ничего не делает. (Но выдает ошибку в консоли браузера, "Uncaught TypeError: Cannot call method 'noConflict' of undefined.".)
$.noConflict();
jQuery(document).ready(function($){
$('#comments').waypoint(function () {
var disqus_shortname = 'paulund';
$.ajax({
type: "GET",
url: "http://" + disqus_shortname + ".disqus.com/embed.js",
dataType: "script",
cache: true
});
}, { offset: '100%', triggerOnce: true });
});
$({...})()
вокруг кода создания элемента скрипта - он не должен иметь$
в любом случае, потому что вам не нужен обработчик готовности документа после загрузки страницы, но вы не не нужна анонимная функция из версии #1, когда все это содержится внутри функции пыльника. (Немедленно вызываемая анонимная функция в #1, по-видимому, предназначена для того, чтобы держать переменнуюdsq
вне глобальной области видимости.) - person nnnnnn   schedule 07.12.2013