2009-12-27 56 views
1

嗨,我與在momemt谷歌AJAX API亂搞,並從文檔下面的例子中我在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文件(函數()

我得到以下錯誤:空爲空或不是對象

我顯然缺少一些基本的東西,因爲我剛剛學習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> 

但是,這個將不會像您期望的那樣工作,因爲在完全加載DOM之前,document.ready事件不會觸發。但是,JavaScript文件在加載時執行。因此,實際的執行是這樣的:

  1. 加載谷歌JSAPI
  2. 負荷的jQuery
  3. 負載External.js
  4. 調用文檔準備

取決於你的代碼看起來其餘比如,您可能希望將所有初始化代碼放在單獨的文件中,或將您的search加載回主文檔中。

關於不顯眼CODE:

大衛,不顯眼的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 
    }); 
}); 

是變得不顯眼,因爲頁面仍然有效(負載/做的/事情默認),但是當啓用JavaScript時執行更好的方式(執行javascript而不是加載該url)。這也被稱爲漸進式增強。