MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-27, 15:34

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 7 篇文章 ] 
發表人 內容
文章發表於 : 2006-06-16, 11:08 
離線

註冊時間: 2006-06-16, 11:02
文章: 2
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]


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-TW; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-06-16, 11:40 
離線

註冊時間: 2006-06-16, 11:02
文章: 2
如同對於標準 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迴圈去避開空白節點,但我不知道怎麼套用上我這個程式,請問那位大大可以給於協助嗎?感激不盡


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-TW; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-06-19, 21:12 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
把這一段...
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 可以改成隨便你要的名稱

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-08-26, 14:32 
離線

註冊時間: 2006-08-26, 11:20
文章: 6
以下是我發生的問題,不知是否有人知道為什麼

我在 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>




回頂端
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-08-26, 22:12 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
這年頭做 Ajax 的,沒有人在自己又寫 XMLHttpRequest 的控制碼,因為各瀏覽器的行為怪癖很多,所以建議使用 Prototype 或者是 Dojo 這兩個 library。這樣的話,部分就已經有 library 幫你解決了。
我個人是偏好 Prototype。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-08-26, 22:35 
離線
[社群版本維護者]

註冊時間: 2004-11-28, 17:21
文章: 856
ianjung 寫:
以下是我發生的問題,不知是否有人知道為什麼

我在 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>


如果你在AJAX中用alert()的話是不準確的

_________________
I am the bone of my firefox.

Source is my body, and library is my blood.

I've created over a thousand of builds.

Unaware of notice.
Nor aware of warning.

With stood pain to create binaries.
Waiting for one's download.

I have no regrets. This is the only path.

My whole life was "Unlimited build works"

「只有宗教狂熱分子和極權主義國家才將道德等同於法制。」 Linus Torvalds寫道。
我的廢棄日記


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7pre) Gecko/20060826 Firefox/1.5.0.7pre (Firefox musume)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2006-08-26, 22:39 
離線

註冊時間: 2006-03-02, 10:09
文章: 8
這個跟空白字元 (此空白字元包含:空白 [Space]、定位 [Tab]、Carriage return [\r] 與 Line feed (newline) [\n]) 有關。

對 MS XML 來說,他預設會將這些空白字元濾掉,而 Mozilla 則不會濾掉,直接以 Node 的形式存在,所以導致兩者取得的 childNodes.length 會有所不同。


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 7 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 9 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群