2009-12-27 3 views
1

Привет Я возиться с Google Ajax API на momemt и следуя примерам из документации У меня есть два сценария теги в моем HTML файл:вопрос google.load

<script src="http://www.google.com/jsapi" type="text/javascript"></script> 
<script language="Javascript" type="text/javascript">google.load('search', '1');</script> 

Все работает нормально, но это будет не работает, когда я использую jquery и пытаюсь вызвать google.load ('search', '1'); во внешнем файла JavaScript после $ (документ) .ready (функция()

Я получаю следующее сообщение об ошибке:. нуль равно нулю или не является объектом

Я, очевидно, что-то отсутствует основополагающий как я только учусь JavaScript но у меня создалось впечатление, что лучше всего использовать javascript ненавязчиво. Второй скриптовый тег, на самом деле содержащий некоторый код js, не является ненавязчивым. Может ли кто-нибудь помочь в этом?

ответ

7

Из того, что вы объяснили, кажется, ваша страница что-то вроде этого:

<script src="http://www.google.com/jsapi" type="text/javascript"></script> 
<script type="text/javascript"> 
    google.load('jquery'); 
    $(document).ready(function(){ 
     ... do stuff ... 
    }); 
</script> 
<script src="/my/external.js" type="text/javascript"></script> 

Однако этот не будет работать так, как вы ожидаете, так как событие document.ready не срабатывает, пока DOM не будет полностью загружен. Файлы JavaScript, однако, выполняются по мере их загрузки. Таким образом, фактическое исполнение выглядит следующим образом:

  1. нагрузки Google JSAPI
  2. Load Jquery
  3. Load External.js
  4. Вызов документа Готовые

В зависимости от того, что остальная часть вашего кода выглядит например, вы можете захотеть либо поместить весь свой код инициализации в отдельный файл, либо переместить ваш search обратно в основной документ.

О ненавязчивым КОД:

Дэвид, ненавязчивый JavaScript должен делать с тем, как это влияет на страницу, а не является ли это встраиваемое или внешний.

Это больше о не делает ваш сайт настолько зависит от JavaScript, что он не работает с ней отключена

Например, это навязчивым:

<a href="#" onclick="doSomething(); return false;">Click Me</a> 

Потому что он будет работать только при включенном JavaScript , Кроме того, код является встроенным, что плохо, потому что он не отделяет функциональность от структуры (HTML).

Однако, принимая подобный кусок кода:

<a href="/do/something" id="do-something">Click Me</a> 

и использованием JavaScript/JQuery фрагмент кода:

$(document).ready(function(){ 
    $("#do-something").click(function(e){ 
     doSomethingNicer(); 
     e.preventDefault(); // Keep the browser from following the href 
    }); 
}); 

Is становится ненавязчивым, потому что страница все еще работает (нагрузки/сделать/что-то по по умолчанию), но он работает лучше, когда JavaScript включен (выполняется загрузка javascript вместо загрузки этого URL-адреса). Это также называется прогрессивным улучшением.