7

我正在编写一个应用程序:

  1. 绝对依赖于通过向服务器发送数据Javascript
  2. 代码中不得包含JQuery库。

(我不知道我的代码是否会包含在已经有jquery lib的网页中,我不知道是否会有正确的版本,我不知道是否会有JQuery冲突等等......)

我必须使用本机JS功能XMLHttpRequest(ActiveX for older IE's)方法,这很简单,但比我看到的警告要多:

“没有 jQuery,AJAX 编码可能有点棘手!

编写常规的 AJAX 代码可能有点棘手,因为不同的浏览器有不同的 AJAX 实现语法。这意味着您将不得不编写额外的代码来测试不同的浏览器。然而,jQuery 团队已经为我们解决了这个问题,因此我们只需一行代码就可以编写 AJAX 功能。”

这有什么“棘手”的?我可能做错了什么?据我所知

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp = new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

只是针对不同浏览器的额外代码,我的 xmlhttp var 应该从现在开始准备在IE5, IE6, IE7+, Firefox, Chrome, Opera,中完成工作Safari

XMLHttpRequest以上是我应该做的所有跨浏览器代码调整,还是在使用本机对象时我应该注意什么?

4

2 回答 2

8

这是跨浏览器支持唯一需要的东西,除非您需要支持真正旧的 IE(显然使用不同的 ActiveXObject)。

然而,使用例如 jQuery 提供了许多额外的优势:

  • 单个函数调用,没有不必要的变量使您的范围变得混乱。
  • 将对象自动序列化为 GET/POST 参数。当您可以简单地传递对象时,为什么要手动执行(您需要正确编码值!)?
  • 自动解析响应,例如在 JSON 的情况下,您会得到一个对象,而不仅仅是您需要手动解析的字符串。
  • 常见事件的良好回调(成功/失败/完成)
  • 支持例如 XDomainRequest for CORS 在 IE 中的可插入架构。

由于您提到您不能使用 jQuery,因为您的应用程序将嵌入另一个可能与之冲突的站点中:您可以通过包含 jQuery 来避免这种情况,然后使用$.noConflict(true)它来恢复旧的$jQuery变量。要在您的代码中使用它,您可以像这样编写它:

(function($) {

})(jQuery.noConflict(true));
于 2012-11-13T09:44:01.893 回答
0

XMLHttpRequest 对象在这里被定义为 W3C 标准:

http://www.w3.org/TR/XMLHttpRequest2/

因此 API 本身应该在浏览器之间保持一致。

正如您所提到的,唯一的变化应该是如何获取 XMLHttpRequest 对象。看这里:

http://www.quirksmode.org/js/xmlhttp.html

对于跨浏览器、非 jQuery 的执行方式(获取对象是在他的XMLHttpFactories数组中完成的。

于 2012-11-13T09:44:27.540 回答