MozTW 討論區 https://forum.moztw.org/ |
|
[已解決] Ajax 回傳 XML 文件的問題 https://forum.moztw.org/viewtopic.php?f=8&t=18914 |
第 1 頁 (共 1 頁) |
發表人: | BabySatan [ 2007-05-12, 16:09 ] |
文章主題 : | [已解決] Ajax 回傳 XML 文件的問題 |
前陣子剛接觸 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移除 |
發表人: | kourge [ 2007-05-13, 14:21 ] |
文章主題 : | |
http://developer.mozilla.org/zh_tw/docs ... B%E7%AF%87 玩 Ajax 最好不要把自己陷於 XML,不然簡直是找罪受。用 responseText 配上 JSON 或自己的資料格式吧。 另外最好也不要自己寫 library,這樣會事倍功半。用 jQuery 或 Prototype。 |
發表人: | BabySatan [ 2007-05-15, 20:56 ] |
文章主題 : | |
如果 request 產生的 result 是很簡單的單一 data 是直接可以拿來用的,那當然是 responseText() 但如果 result 是多筆資料 又或是需要 parse 的東西 我想沒人會用 responseText() 來自找麻煩吧XD 另,以這個例子來說 我是覺得如果不先弄懂這些原理的話 不管是 Prototype 還是 dojo 之類的也都沒輒啊XD 這時候無論手上的工具多強都沒用XD |
發表人: | kourge [ 2007-05-16, 14:42 ] |
文章主題 : | |
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); 等等。 |
發表人: | roytam1 [ 2007-05-16, 16:55 ] |
文章主題 : | |
JSON有安全隱憂。(1s |
發表人: | kourge [ 2007-05-17, 12:47 ] |
文章主題 : | |
roytam1 寫: JSON有安全隱憂。(1s
用 RegExp 偵測惡意程式碼,加上不要隨意信任其他網站,便可解決問題。 還有 while(1) hack 也可以防止資料盜用。 |
發表人: | roytam1 [ 2007-05-17, 13:10 ] |
文章主題 : | |
kourge 寫: roytam1 寫: JSON有安全隱憂。(1s 用 RegExp 偵測惡意程式碼,加上不要隨意信任其他網站,便可解決問題。 還有 while(1) hack 也可以防止資料盜用。 well... http://blog.roodo.com/rocksaying/archives/2955557.html |
發表人: | kourge [ 2007-05-20, 02:43 ] |
文章主題 : | |
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 的乾淨物件偷過來用。 |
發表人: | peter_tw [ 2007-09-23, 23:41 ] |
文章主題 : | |
怎沒有人正確回答該問題 真令人失望 |
發表人: | kourge [ 2007-09-24, 06:30 ] |
文章主題 : | |
怎麼會沒有? responseXML 不能用的時候,要嘛在伺服器就要傳回 text/xml 這個 MIME type,要嘛就要呼叫 XMLHttpRequest 的 overrideMimeType() 來解決。 更棒的方法就是不要用 XML,用其他的資料格式,反正 XML 本身也夠麻煩。比如說用 JSON,或者像 Ruby on Rails 一樣,伺服器直接傳回 HTML 片段供你注入頁面還有直接傳回 JS 碼供你 eval()。 |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |