2009-11-12 38 views
0

我在這個愚蠢的錯誤上花了幾個小時,所以任何幫助將不勝感激!javascript錯誤:「data.getElementsByTagName不是函數」

我正在使用Jquery從谷歌appengine上託管的python文件請求xml。我然後試圖處理XML。

下面是從螢火蟲獲取的職務請求的響應:

<?xml version="1.0" encoding="ISO-8859-1"?><building key='agdhcHRydXNochALEglCdWlsZGluZ3MY3x4M' bldname='test'></building> 
Status: 200 OK 
Cache-Control: no-cache 
Content-Type: application/xml 
Content-Length: 0 

及這裏的處理數據的JavaScript:

data.getElementsByTagName is not a function 
anonymous("<?xml version="1.0" encoding="ISO-8859-1"?><building key='agdhcHRydXNochALEglCdWlsZGluZ3MY4B4M' bldname='test'></building>\nStatus: 200 OK\r\nCache-Control: no-cache\r\nContent-Type: application/xml\r\nContent-Length: 0\r\n\r\n")viewBuilding.js (line 120) 
I()jquery.min.js (line 19) 
anonymous(6)jquery.min.js (line 19) 
[Break on this error] alert(data.getElementsByTagName("building"));\n 

jQuery.post(toLoad,formInput,function(data){     
      alert(data.getElementsByTagName("building")); 
    }) 

這裏的錯誤,我從螢火蟲獲取

我已經使用了特定位的JavaScript,以便網站的部分處理x毫升,所以我的直覺告訴我,JavaScript是正確的,也許數據的格式是錯誤的?我卡住了。 :/

謝謝!

+1

我懷疑這是由於錯誤的數據格式,更像是錯誤的數據類型。 'getElementsByTagName'在DOM主體的上下文中使用。 – 2009-11-12 00:59:27

+0

你在測試什麼瀏覽器?該功能不受所有瀏覽器支持/定義。使用firefox與螢火蟲的 – 2009-11-12 01:00:19

+0

。數據由python腳本返回並由jquery分配變量。 – iceanfire 2009-11-12 01:31:48

回答

1

試圖強迫jQuery來識別返回的數據爲XML使用

jQuery.post(toLoad, formInput, 
    function(data, textStatus) { 
    // now check if data is set and what the status is 
    alert(data); 
    alert(textStatus); 
    //alert(data.getElementsByTagName("building")); 
    }, 
    'xml' 
); 

順便說一句。看起來可疑的是Content-Length: 0標題。


根據您的評論我的結論是,生成您的XML的頁面是假的。它首先輸出xml,然後將一些http-headers作爲數據。哪一個當然不能是有效的xml。因此,jQuery正確地確定返回的數據是格式文本。

在輸出單行xml之前,您必須輸出所有標題。

+0

下面是警報(數據)返回: <?XML版本= 「1.0」 編碼= 「ISO-8859-1」?><建設重點= 'agdhcHRydXNochALEglCdWlsZGluZ3MY4h4M' bldname = '測試'> 狀態:200 OK 緩存控制:無緩存 的Content-Type:application/xml進行 的Content-Length:0 這裏是警戒(textStatus)返回: 成功 – iceanfire 2009-11-12 01:37:52

+0

這裏是警戒(textStatus)返回: 「成功」 – iceanfire 2009-11-12 01:38:26

+0

檢查答案的第二部分。產生xml的腳本是假的。它將http-headers與xml-data混合,這當然會導致無效的xml,並強制jQuery將數據作爲字符串返回給函數 – jitter 2009-11-12 01:45:34

0

那麼,時間要通過各種清單。

我打算假設數據已正確分配,並且您已驗證它包含您的「數據」。現在,由於它給你提供了一個函數不存在的錯誤,我們知道它確實沒有被找到,因爲否則如果函數沒有找到這個名字的標籤,函數會返回一個空節點。

我很好奇你是否在與JavaScript相同的文件中使用XML,因爲在那種情況下你不需要指定文檔,而不是你的數據?我知道我說的這個場景是我爲初始測試做的,所以我只是想確定一下。

如果您使用數據引用外部XML,那麼如實地應該沒有問題。

真的,它似乎都只是圍繞可變數據旋轉。在我看來,由於某種原因,數據可能不是指正確的元素,也不是指任何東西。

希望這會有所幫助, David。

0

來自GAE服務器的響應錯誤。它具有以下的 XML數據,作爲響應主體的一部分。這不會是一個有效的XML文檔;如果沒有在頂部正確顯示標題,則沒有活動的Content-Type標題可以告訴jQuery傳入文檔是XML。因此,它會向您發送純文本數據響應,而不是您想要的XML文檔。出現此錯誤是因爲您無法通過String撥打getElementsByTagName

也許GAE應用程序的作者已經忘記了如何編寫WSGI應用,並簡單地吐XML文檔到標準輸出:

print xml 
    ... 
start_response('200 OK', [('Content-Type', 'text/xml')]) 
return [] 

,而不是正確地返回到服務器來處理:

start_response('200 OK', [('Content-Type', 'text/xml')]) 
return [xml] 

服務器爲什麼認爲Content-Length這可以解釋爲0