2009-01-06 79 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(); 
} 

}