2009-11-07 57 views
1

有人能告訴我,如果這樣的:這些JQuery調用是否相同?

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      alert("Data Loaded: " + data); 
     } 
    }); 

是一樣的:

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      alert("Data Loaded: " + $(data).html()); 
     } 
    }); 

當檢索該內容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>blank page</title> 
</head> 
<body> 
    <div id="content">Some content.</div> 
</body> 
</html> 

我問,因爲第二jQuery的AJAX調用不做不警惕。有人可以解釋爲什麼這兩個警報版本不一樣嗎?

回答

2

引述jQuery Documentation for the $-function

簡單元素,而屬性,例如 「」,通過 使用document.createElement創建。通過將 字符串分配給div元素的.innerHTML屬性來分析所有其他 個案。 HTML字符串不能包含 ,例如html,head, 正文或標題元素中的元素無效 。

您不能將完整的html頁面放入$ -function中,只能在div -element中有效的元素。

+0

我相信這個問題正如我在我的回答中指出的那樣,正如您在鏈接中提到的那樣:「要動態創建的HTML字符串。請注意,這會解析HTML,而不是XML。」 – 2009-11-07 22:50:57

+0

實際上並不重要,因爲既不能將完整的HTML也不能將XHTML/XML頁面放入$ -function。在div下允許使用HTML元素,HTML/XML無關緊要。 – stefanw 2009-11-08 10:42:22

+0

進一步閱讀JQuery聯機文檔的Ajax部分(.load - http://docs.jquery.com/Ajax/load#urldatacallback)我明白了; 「在jQuery 1.2中,你現在可以在URL中指定一個jQuery選擇器,這樣做會過濾傳入的HTML文檔,只注入與選擇器匹配的元素。」這是否意味着load()不使用$()函數?如果是這樣,它如何工作? – 2009-11-09 08:55:33

1

因爲doctype是XHTML,所以第一個例子是返回XML。所以,當你提醒XML時,它是正確的。在第二個例子中,jQuery必須認爲它是XML,不能用.html()訪問。

爲了讓第二個示例工作嘗試第二個例子是不是要求alert因爲一個錯誤的success回調的內部發生的選項

dataType: "html" 
+0

我相信,在第二個示例中添加您的行對我來說並不適用,因爲上面回答中提到的原因,我認爲是由stefanw。 – 2009-11-09 08:18:44

0

。打開螢火蟲,你應該看到有錯誤發生(雖然螢火蟲告訴你它正在發生的行將不準確)。如果由於某種原因,螢火蟲不會顯示你正在發生錯誤,這是因爲jQuery正在優雅地處理分配給success的函數的異常。你可以用一個try/catch塊包裝你的alert並親自查看。

$.ajax({ 
     url: 'test.html', 
     success: function(data) { 
      try { 
       alert("Data Loaded: " + $(data).html()); 
      } catch (e) { 
       alert("Error happened: " + e.message); 
      } 
     } 
    }); 

發生該錯誤的原因是,返回的數據不是實際的HTML元素。