gzpbx
狐狸大王
狐狸大王
  • UID1527
  • 注册日期2004-12-29
  • 最后登录2009-06-30
  • 发帖数410
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:3873回复:4

IE vs. FireFox 系列 - 使用 XMLHTTP 讀取遠端檔案[转载]

楼主#
更多 发布于:2005-07-20 12:08
IE vs. FireFox 系列 - 使用 XMLHTTP 讀取遠端檔案
作者 : 孤影     這個程式不能有問題歐! 加入我的收藏夾!
發表:2005-04-26 最後更新:2005-04-26 點閱數:147
評分  

總分 : 9 分, 投票人數 : 2 人
類別 :
Script ,
摘要 :
為了讓網頁在各種瀏覽器中都可以使用,
所以想在這作一系列的探討,
討論各個瀏覽器之間的差異與如何讓你的網頁可以相容於各個瀏覽器!!
前言
要作一個網站,在之前算是很容易,因為大多數都是使用IE,但現在,強制使用者使用IE的話,你的網站將可能會越來越少人瀏覽,
因此,如何設計出任何瀏覽器適用的網站,已經變成是一個網頁設計師要面臨的嚴重問題.

在此,我將與大家分享一些我在這方面所遇到的問題與經驗.

面臨的問題 - 使用 XMLHTTP 讀取遠端檔案
有時,為了方便使用者操作網頁,我們會使用javascript調試xmlhttp,
讓網頁中的資料可以即時更新,但又不需要將整個網頁重新載入,
使用IE的話,我們都習慣使用下面的方式來呼叫

var xmlDom = new ActiveXObject("Microsoft.XMLHTTP");
var strData = "code=123";
xmlDom.open("POST","default.asp",false);
xmlDom.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xmlDom.send(strData);


但,在firefox,這樣的程式是不會有反應的,
因為firefox並不支援

new ActiveXObject("Microsoft.XMLHTTP")


在firefox中,必須使用下面的方式才行

new XMLHttpRequest()


其實在IE中,有時你也會發現有人使用

new ActiveXObject("Msxml2.XMLHTTP")

,
不過這就要看client所支援的xmlhttp是什麼版本的...
所以,為了讓大多數的瀏覽器都可以使用,
一般的想法是先判斷瀏覽器的種類,然後在建立相對應的物件,
不過,google提供了另一個做法,
就是直接建立物件,如果發生錯誤就在建立另一個試試,
程式寫法如下:

function jb()
{
  var A=null;
  try
  {
    A=new ActiveXObject("Msxml2.XMLHTTP")
  } catch(e)
  {
    try
    {
      A=new ActiveXObject("Microsoft.XMLHTTP")
    } catch(oc)
    {
      A=null
     }
   }

  if ( !A && typeof XMLHttpRequest != "undefined" )
  {
    A=new XMLHttpRequest()
  }
  return A
}



這段是從Google Suggest的js中擷取出來的,
如此一來,只要將程式改成

var xmlDom = jb();
var strData = "code=123";
xmlDom.open("POST","default.asp",false);
xmlDom.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
xmlDom.send(strData);


就可以了,

至於,

new ActiveXObject("Microsoft.XMLHTTP")




new XMLHttpRequest()


在功能上有沒有什麼差異,這就要等你去發掘了,
因為我的問題,到這已經算是解決了...
作者 : 孤影
捐贈 VP 給 孤影
休息,是為了走更長遠的路,
休息,並不表示就這樣放棄,
休息,是為未來的努力作準備,
我想,這不是畫下句點,這只是一個短暫的分號!
[觀看作者的相關資訊]
如果你爱上了一朵生长在一颗星星上的花,那么夜间你看着天空就感到甜蜜愉快。所有的星星上都好象开着花。
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
1楼#
发布于:2005-07-20 12:08
都不是 W3C 标准,各有各实现。

Food for thought: 为甚么 W3C 没有标准实现?为甚么强调标准的 FF 要实现这个 IE 专用功能?



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
Minisheep
小狐狸
小狐狸
  • UID2333
  • 注册日期2005-01-19
  • 最后登录2006-10-23
  • 发帖数80
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2005-07-20 12:08
XML不是IE专用功能,XMLHTTP本来就只是让浏览器本身实现与远程链接进行交流的功能,并非专用不专用而已。只不过IE 是利用ActiveXObject外置,FireFox是本身自带的对象。

有用的东西加进来,又没什么不好的
jhsea3do
小狐狸
小狐狸
  • UID5719
  • 注册日期2005-05-05
  • 最后登录2006-01-18
  • 发帖数45
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2005-07-20 12:08
路本不是路,走的人多了遍成为了路!

以下为apple网站上介绍XMLHttpRequest时所提到的内容。

XMLHttpRequest已经是一个大家公认的准标准了

History and Support

Microsoft first implemented the XMLHttpRequest object in Internet Explorer 5 for Windows as an ActiveX object. Engineers on the Mozilla project implemented a compatible native version for Mozilla 1.0 (and Netscape 7). Apple has done the same starting with Safari 1.2.

Similar functionality is covered in a proposed W3C standard, Document Object Model (DOM) Level 3 Load and Save Specification. In the meantime, growing support for the XMLHttpRequest object means that is has become a de facto standard that will likely be supported even after the W3C specification becomes final and starts being implemented in released browsers (whenever that might be).
关注WebStandard,关心那些不使用IE的弱势群体!
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
4楼#
发布于:2005-07-20 12:08
jhsea3do:路本不是路,走的人多了遍成为了路!
回到原帖

说得好,我想说的就是 W3C 对 evolving pattern 反应太迟钝了。自己没有的就指人家不标准,却不好好考虑这种非标准是出于实际需要,只是自己本身未能满足这需要。

standard 是由 planned 加 evolved 组成,忽略任何一点也不能成功。IE 支持这方法多少年了,无数网页亦在使用中,W3C 到现在才来 propose? 到落实时要 IE 改变实现方法?哪便只有迫使 IE 继续忽略 W3C 了。



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
游客

返回顶部