2

我想看看使用 XmlHttpWebRequest 的问题是什么,以便它适用于 Safari、Firefox 和 IE?

4

4 回答 4

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');
于 2008-11-12T02:40:13.690 回答
2

有一篇非常好的文章,介绍了在 XMLHttpRequest 实现中发现的所有主要错误,以及一个非常简单的 XMLHttpRequest 包装器实现,它可以解决这些错误,同时暴露完全相同的 XMLHttpRequest 对象。

于 2008-11-12T09:15:49.617 回答
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 {
于 2008-11-12T02:39:39.227 回答
0

我知道这是一个逃避现实的答案,但如果你使用内置的和跨浏览器不一致的方法,这种事情会让你发疯。选择任何 javascript 库,然后松一口气。

于 2008-11-12T02:53:19.357 回答