MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-22, 09:33

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





發表新文章 回覆主題  [ 10 篇文章 ] 
發表人 內容
文章發表於 : 2007-05-12, 16:09 
離線

註冊時間: 2004-08-30, 11:30
文章: 67
前陣子剛接觸 Ajax
前幾天寫了個小程式來測試 parse XML 文件
平常我的寫作環境
Server 端為 Apache + PHP
Client 端為 Firefox
測試方式為簡單的由 TestAjax.php 呼叫 TestAjax.js
再向 TestXML.php 送出 request
一路測試下來也沒碰到什麼大問題
但後來拿到 IE 上面測試,問題就來了...
首先是在測試 .responseText() 的時候發現中文會變成亂碼
於是先將中文部分移除,想說稍後再找方法解決
但是馬上又發現在測試 .responseXML() 的時候
document.getElementsByTagName() 無法取得 elements
於是就開始找資料,找了半天仍無所獲
後來將 TestXML.php 產生的內容複製貼上存成 TestXML.xml
再令 TestAjax.js 向此 TestXML.xml 送出 request
沒想到這樣就居然 ok 了,連帶中文也顯示正常了
這真是令我百思不得其解
不知道有沒有人碰過一樣的問題?
還請知道如何解決的版友解惑一下m(_ _)m

剛剛又測試了一下
這次是直接把 TestXML.xml 另存為 TestXML.php
也就是說 2 個檔案是一樣的內容
但 TestXML.php 依然是不行Orz
感覺有點像是 IE 認不出他是 XML 文件
但是用 IE 直接開啟 TestXML.php 又認得出這是 XML 文件
另外先前有看到這個
不知道是不是第三步中的注意 2 所提到的問題
我先把相關 code 貼上來好了

自問自答XD
問題已解決 : P
果然如上面那個連結所說
加個 header('Content-Type:text/xml'); 就 ok 囉
為了不佔版面
Code移除


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-TW; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-13, 14:21 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
http://developer.mozilla.org/zh_tw/docs ... B%E7%AF%87

玩 Ajax 最好不要把自己陷於 XML,不然簡直是找罪受。用 responseText 配上 JSON 或自己的資料格式吧。

另外最好也不要自己寫 library,這樣會事倍功半。用 jQuery 或 Prototype。

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


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-15, 20:56 
離線

註冊時間: 2004-08-30, 11:30
文章: 67
如果 request 產生的 result 是很簡單的單一 data
是直接可以拿來用的,那當然是 responseText()
但如果 result 是多筆資料
又或是需要 parse 的東西
我想沒人會用 responseText() 來自找麻煩吧XD

另,以這個例子來說
我是覺得如果不先弄懂這些原理的話
不管是 Prototype 還是 dojo 之類的也都沒輒啊XD
這時候無論手上的工具多強都沒用XD


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-TW; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-16, 14:42 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
BabySatan 寫:
如果 request 產生的 result 是很簡單的單一 data
是直接可以拿來用的,那當然是 responseText()
但如果 result 是多筆資料
又或是需要 parse 的東西
我想沒人會用 responseText() 來自找麻煩吧XD

其實有時候用 responseText 反而比較簡單,因為伺服器只要傳回 JavaScript 語法:
{'found': true, 'results': [1, 2, 3]}
然後再 eval() 就行了,不需要寫 parse 程式,也不用 parse XML。這種做法被稱做 JSON,有被訂成 RFC 標準,編號 4627。


BabySatan 寫:
另,以這個例子來說
我是覺得如果不先弄懂這些原理的話
不管是 Prototype 還是 dojo 之類的也都沒輒啊XD
這時候無論手上的工具多強都沒用XD

的確,像 XML 的 MIME type 問題。

許多人玩 Ajax,常常會有兩種不同的情況:
1. 聊解原理後,就拼死命地寫自己的 lib,事倍功半、燃燒歲月、削短陽壽、英年早逝(好像有點誇大了XD)。
2. 不聊解原理就用 lib,include 整個 Prototype 以後,只用到 $() 這個函式,然後抱怨 Prototype 太大,佔幾十 K,又學不好 JavaScript,還在用五年前的退步寫法。像:
var x = new Array();
x['blah'] = 'bleah';
還有:
var x = eval('img.' + property);
等等。

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


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-16, 16:55 
離線
[社群版本維護者]

註冊時間: 2004-11-28, 17:21
文章: 856
JSON有安全隱憂。(1s

_________________
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.12pre) Gecko/20070511 Firefox/1.5.0.12pre (Firefox musume)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-17, 12:47 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
roytam1 寫:
JSON有安全隱憂。(1s

用 RegExp 偵測惡意程式碼,加上不要隨意信任其他網站,便可解決問題。
還有 while(1) hack 也可以防止資料盜用。

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


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-17, 13:10 
離線
[社群版本維護者]

註冊時間: 2004-11-28, 17:21
文章: 856
kourge 寫:
roytam1 寫:
JSON有安全隱憂。(1s

用 RegExp 偵測惡意程式碼,加上不要隨意信任其他網站,便可解決問題。
還有 while(1) hack 也可以防止資料盜用。

well...
http://blog.roodo.com/rocksaying/archives/2955557.html

_________________
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.12pre) Gecko/20070511 Firefox/1.5.0.12pre (Firefox musume)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-05-20, 02:43 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
roytam1 寫:
kourge 寫:
roytam1 寫:
JSON有安全隱憂。(1s

用 RegExp 偵測惡意程式碼,加上不要隨意信任其他網站,便可解決問題。
還有 while(1) hack 也可以防止資料盜用。

well...
http://blog.roodo.com/rocksaying/archives/2955557.html

該文結尾有提到:
引言回覆:
加上注釋符號或是改用 XML 格式
在《Load and Execute JavaScript on Demand, by createElement》中提到,以<script>載入資料時,便立即執行,不能選擇執行時機,也不能僅執行片段內容。因此外部文件必須是一個純 JavaScript 文件。若在 JSON 資料前後加上注釋符號,如 /*[{"title": "xyz"}]*/,便可令 JavaScript 視之為一般注釋而不加以執行,如此便不會喚起 Hijacking 程式碼。當然,改用 XML 格式也有同樣效果。再參閱《JSON 的安全性》了解載入 JSON 的安全作法。

comment hack 跟 while(1) hack 是同樣性質的,兩者皆會讓程式碼無法執行,前者會讓 interpreter 忽略程式碼,後者會讓整個程序進入無限迴圈。

JSON data hijack 通常都是靠覆寫 Object 或 Array 物件並塞入 getter 和 setter 來竊取資料,但:
1. IE 並不支援 getter 和 setter。
2. 在 Firefox,任何被動過手腳的內建物件,如 Object 或 Array,都可以用 delete 來清空。在 Firefox,如果 Object 被動過手腳,執行:
delete Object;
便會把 hijack 過的 Object 砍掉,導致 Firefox 建立一個新的,未被 hijack 的 Object。另外也有一個畫蛇添足的技巧也可以做到這點,方法是建立一個 iframe,再把 iframe 的乾淨物件偷過來用。

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


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-23, 23:41 
怎沒有人正確回答該問題

真令人失望


回頂端
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Alexa Toolbar; mxie; FDM; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2)
  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-24, 06:30 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
怎麼會沒有?
responseXML 不能用的時候,要嘛在伺服器就要傳回 text/xml 這個 MIME type,要嘛就要呼叫 XMLHttpRequest 的 overrideMimeType() 來解決。

更棒的方法就是不要用 XML,用其他的資料格式,反正 XML 本身也夠麻煩。比如說用 JSON,或者像 Ruby on Rails 一樣,伺服器直接傳回 HTML 片段供你注入頁面還有直接傳回 JS 碼供你 eval()。

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


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 10 篇文章 ] 

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


誰在線上

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


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

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