不使用原生XMLHttpRequest的原因 - 为什么$ .ajax是强制性的?

Mil*_*vić 6 javascript jquery xmlhttprequest jqxhr

我正在写一个应用程序:

  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");
  }
Run Code Online (Sandbox Code Playgroud)

针对不同的浏览器只额外的代码和我的XMLHTTP var目录应该从现在开始准备做的工作中IE5,IE6,IE7+,Firefox,Chrome,Opera,Safari.

是否应该进行跨浏览器代码调整,或者在使用本机XMLHttpRequest对象时还应该注意什么?

Thi*_*ter 8

除非你需要支持真正的旧IE(显然使用不同的ActiveXObject),否则这是跨浏览器支持所必需的.

但是,使用例如jQuery提供了许多额外的优点:

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

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

(function($) {

})(jQuery.noConflict(true));
Run Code Online (Sandbox Code Playgroud)