2009-01-06 36 views

回答

8

使用jQuery(或類似的JavaScript庫)。它處理諸如創建Ajax調用等跨瀏覽器兼容性問題。

For example,使用jQuery Ajax call

$.ajax({ 
    url: 'document.xml', 
    type: 'GET', 
    dataType: 'xml', 
    timeout: 1000, 
    error: function(){ 
     alert('Error loading XML document'); 
    }, 
    success: function(xml){ 
     // do something with xml 
    } 
}); 
9

這裏是一個有用的鏈接和一些代碼(應涵蓋所有基地)

http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx

 var request = null; 

     function InitAJAX() 
     { 
      var objxml = null; 
      var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];    

      try 
      { 
       objxml = new XMLHttpRequest(); 
      } 
      catch(e) 
      {     
       for (var i = 0; i < ProgID.length; i++) 
       { 
        try 
        { 
         objxml = new ActiveXObject(ProgID[i]); 
        } 
        catch(e) 
        {       
         continue; 
        } 
       } 
      } 

      return objxml;    
     } 

     request = InitAJAX(); 
+0

跨瀏覽器,任何人?我認爲這不適用於Firefox。 – 2010-01-09 14:18:41

+2

@Bishiboosh - 它在Firefox中正常工作 - https://developer.mozilla.org/En/Using_XMLHttpRequest – 2010-01-14 15:21:43

3

使用幾乎任何JavaScript Ajax庫最好是編寫自己的Ajax框架 - 除非這是重點。您可能想查看jQuery或PrototypeMooToolsDojo或[在此處插入姓名]框架,看看他們如何堅持自己編寫自己的程序。

11

對於庫少的解決方案,你可以很容易模仿原型的使用Try.these

function newAjax() { 
    try { return new XMLHttpRequest();     } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(){} 
    try { return new ActiveXObject('Msxml2.XMLHTTP');  } catch(){} 
    try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(){} 
    return false; 
} 
+0

清潔和斯巴達。可能想要「記住」定位的版本,所以你不必每次都有1-4次例外。 – Nicholas 2009-01-06 10:55:03

1

這是我使用的東西,它工作正常,我:

function request() 
    { 
     try 
     { 
      try 
      { 
       return new ActiveXObject("Microsoft.XMLHTTP") 
      } 
      catch(e) 
      { 
       return new ActiveXObject("Msxml2.XMLHTTP") 
      } 
     } 
     catch(e) 
     { 
      return new XMLHttpRequest() 
     } 
    } 
0

我一起去Cletus對jQuery的建議,同時還檢查了jQuery Form插件,它非常強大且易於使用,可以快速將表單通過Ajax轉換爲工作模式。

8

我建議以下Sergey's advise或寫一個小的,不太複雜的補丁IE自己:

if(typeof window.XMLHttpRequest === 'undefined' && 
    typeof window.ActiveXObject === 'function') { 
    window.XMLHttpRequest = function() { 
     try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {} 
     try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {} 
     return new ActiveXObject('Microsoft.XMLHTTP'); 
    }; 
} 

然後,你可以做

var req = new XMLHttpRequest; 

即使在IE中。

編輯2011-02-18:this blogpost背後MSXML版本的新選擇的理由...

0

功能CreateXmlHttpObj(){

try { 
    XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch (e) { 
    try { 
     XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (oc) { 
     XmlHttpObj = null; 
    } 
} 
// if unable to create using IE specific code then try creating for Mozilla (FireFox) 
if (!XmlHttpObj && typeof XMLHttpRequest != "undefined") { 
    XmlHttpObj = new XMLHttpRequest(); 
} 

}

相關問題