MozTW 討論區 https://forum.moztw.org/ |
|
"childNodes.length"firefox抓到的長度怪怪的 https://forum.moztw.org/viewtopic.php?f=18&t=14566 |
第 1 頁 (共 1 頁) |
發表人: | engine [ 2006-06-16, 11:08 ] |
文章主題 : | "childNodes.length"firefox抓到的長度怪怪的 |
httprequest_test_xml.html 代碼: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" language="javascript"> var http_request = false; function makeRequest(url) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents; http_request.open('GET', url, true); http_request.send(null); } function alertContents() { if (http_request.readyState == 4) { if (http_request.status == 200) { var xmldoc = http_request.responseXML; var root_node = xmldoc.getElementsByTagName('root')[0]; var g2=root_node.childNodes.length; document.write(g2); } else { alert('There was a problem with the request.'); } } } </script> </head> <body> <span style="cursor: pointer; text-decoration: underline" onclick="makeRequest('test.xml')"> Make a request </span> </body> </html> test.xml 代碼: <?xml version="1.0" ?> <root> <rf>wwdw</rf> <rf>wewe</rf> <rf>4452</rf> </root> 好奇怪,在IE能夠正確抓到<rf>的長度為3 但是FireFox卻是抓到"7",怎麼會這樣?請大大幫忙[/code] |
發表人: | engine [ 2006-06-16, 11:40 ] |
文章主題 : | |
如同對於標準 HTML,對於可各方面控制 XML 檔的 DOM 的支援,Mozilla 也是依 W3C 所定的 XML DOM 規格。 Mozilla 與 Internet Explorer 在 XML DOM 上的不同處大多在於 Internet Explorer 非標準的處理方式。 一個常見的差異是對空白字元節點的處理。 通常在建立 XML 時,XML 節點間會有空白。 Internet Explorer 用 XMLNode.childNodes[] 時不會包括這些空白節點, 但在 Mozilla 上這些節點會在 array 裡。 所以只要把test.xml變成 代碼: <?xml version="1.0" ?>
<root><rf>wwdw</rf><rf>wwdw</rf><rf>wwdw</rf></root> 就會找到正常的長度 雖然在http://wiki.moztw.org/index.php/%E8%BD%89%E6%8F%9B%E7%B6%B2%E9%A0%81%E7%A8%8B%E5%BC%8F%EF%BC%9A%E5%BE%9E_IE_%E5%88%B0_Mozilla#.E6.8E.8C.E6.8E.A7_XML 中的"掌控XML"有用for迴圈去避開空白節點,但我不知道怎麼套用上我這個程式,請問那位大大可以給於協助嗎?感激不盡 |
發表人: | kourge [ 2006-06-19, 21:12 ] |
文章主題 : | |
把這一段... var g2=root_node.childNodes.length; 改成這一段 var blah=root_node.childNodes; var g2=0; for (i = 0; i < blah.length; i++){ if (blah[i].nodeType != 3 && blah[i].nodeType != 8) g2++; } 在此,blah 可以改成隨便你要的名稱 |
發表人: | ianjung [ 2006-08-26, 14:32 ] |
文章主題 : | |
以下是我發生的問題,不知是否有人知道為什麼 我在 IE 執行都是正常的,但是在 Firefox 卻出現問題了,先說明 XML 檔案沒問題。 第一個 代碼: alert(CalXml_request.readyState); 執行呈現 1,照程式判斷應該是直接執行 代碼: alert('CalXml_request.readyState != 4.'); 才對,但是卻執行了 代碼: alert(CalXml_request.readyState); alert(Cal_xmldoc); 而這回的 代碼: alert(CalXml_request.readyState); 卻是呈現 4。 如果把第一個 代碼: alert(CalXml_request.readyState); 這段拿掉 程式直接跳到 代碼: alert('CalXml_request.readyState != 4.'); 然後結束..@@ 完整程式碼如下 代碼: <script type="text/javascript" language="javascript">
<!-- function makeRequest(url) { var http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } http_request.open('GET', url, true); http_request.send(null); return http_request; } function GetXmlData() { var cal_xml = 'http://127.0.0.1/baby2/rss/mem_calendar/cal_mem_2.xml'; var CalXml_request = makeRequest(cal_xml); alert(CalXml_request.readyState); if (CalXml_request.readyState == 4) { if (CalXml_request.status == 200) { var Cal_xmldoc = CalXml_request.responseXML; alert(CalXml_request.readyState); alert(Cal_xmldoc); } else { alert('CalXml_request.status != 200.'); } }else{ alert('CalXml_request.readyState != 4.'); } } --> </script> <span onclick="GetXmlData();"> Make a request </span> |
發表人: | kourge [ 2006-08-26, 22:12 ] |
文章主題 : | |
這年頭做 Ajax 的,沒有人在自己又寫 XMLHttpRequest 的控制碼,因為各瀏覽器的行為怪癖很多,所以建議使用 Prototype 或者是 Dojo 這兩個 library。這樣的話,部分就已經有 library 幫你解決了。 我個人是偏好 Prototype。 |
發表人: | roytam1 [ 2006-08-26, 22:35 ] |
文章主題 : | |
ianjung 寫: 以下是我發生的問題,不知是否有人知道為什麼 如果你在AJAX中用alert()的話是不準確的
我在 IE 執行都是正常的,但是在 Firefox 卻出現問題了,先說明 XML 檔案沒問題。 第一個 代碼: alert(CalXml_request.readyState); 執行呈現 1,照程式判斷應該是直接執行 代碼: alert('CalXml_request.readyState != 4.'); 才對,但是卻執行了 代碼: alert(CalXml_request.readyState); alert(Cal_xmldoc); 而這回的 代碼: alert(CalXml_request.readyState); 卻是呈現 4。 如果把第一個 代碼: alert(CalXml_request.readyState); 這段拿掉 程式直接跳到 代碼: alert('CalXml_request.readyState != 4.'); 然後結束..@@ 完整程式碼如下 代碼: <script type="text/javascript" language="javascript"> <!-- function makeRequest(url) { var http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } http_request.open('GET', url, true); http_request.send(null); return http_request; } function GetXmlData() { var cal_xml = 'http://127.0.0.1/baby2/rss/mem_calendar/cal_mem_2.xml'; var CalXml_request = makeRequest(cal_xml); alert(CalXml_request.readyState); if (CalXml_request.readyState == 4) { if (CalXml_request.status == 200) { var Cal_xmldoc = CalXml_request.responseXML; alert(CalXml_request.readyState); alert(Cal_xmldoc); } else { alert('CalXml_request.status != 200.'); } }else{ alert('CalXml_request.readyState != 4.'); } } --> </script> <span onclick="GetXmlData();"> Make a request </span> |
發表人: | pinker [ 2006-08-26, 22:39 ] |
文章主題 : | |
這個跟空白字元 (此空白字元包含:空白 [Space]、定位 [Tab]、Carriage return [\r] 與 Line feed (newline) [\n]) 有關。 對 MS XML 來說,他預設會將這些空白字元濾掉,而 Mozilla 則不會濾掉,直接以 Node 的形式存在,所以導致兩者取得的 childNodes.length 會有所不同。 |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |