XmlHttpRequest在不同浏览器中的行为方式有何不同?

时间:2008-11-12 02:33:36

标签: javascript xmlhttprequest

我试图看看使用XmlHttpWebRequest有什么问题,它适用于Safari,Firefox和IE?

4 个答案:

答案 0 :(得分:3)

最明显的区别可能是如何首先获得XMLHttpRequest:

var xhr;
if (window.XMLHttpRequest) {
   xhr = new XMLHttpRequest(); // Mozilla/Webkit/Opera
} else if (window.ActiveXObject) {
   xhr = new ActiveXObject('Msxml2.XMLHTTP'); // IE
} else {
   throw new Error('Ajax likely not supported');
}

话虽如此,我强烈关注一个抽象库,例如jQuery。它让像ajax这样的东西变得非常简单:

$('#container').load('/ajax/resource');

答案 1 :(得分:2)

有一篇非常好的文章介绍了所有主要的bugs found in XMLHttpRequest implementations和一个非常轻的implementation of a XMLHttpRequest wrapper,这些文章可以解决这些错误,同时公开完全相同的XMLHttpRequest对象。

答案 2 :(得分:1)

这是一个在这个问题上沾沾自喜的人:

http://www.webmasterworld.com/javascript/3195000.htm

研究这些问题的一种通用方法是查看javascript库的源代码,例如jQuery,因为库的一个功能是处理差异。这是一个处理XMLHttpRequest的jQuery片段。请注意有关浏览器差异的评论。

    // Create the request object; Microsoft failed to properly
    // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
    var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

    // Open the socket
    // Passing null username, generates a login popup on Opera (#2865)
    if( s.username )
        xhr.open(type, s.url, s.async, s.username, s.password);
    else
        xhr.open(type, s.url, s.async);

    // Need an extra try/catch for cross domain requests in Firefox 3
    try {

答案 3 :(得分:0)

我知道这有点像个问题,但如果您使用内置且不一致的跨浏览器方法,这种事情会让您感到疯狂。选择任何JavaScript库并松一口气。