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

时间:2012-11-13 09:37:05

标签: javascript jquery xmlhttprequest jqxhr

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

  1. 完全依赖于通过Javascript
  2. 向服务器发送数据
  3. 不得在代码中包含JQuery库。
  4. (我不知道我的代码是否会包含在已经有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应该从现在开始准备好在IE5IE6IE7+Firefox,{ {1}},ChromeOpera

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

2 个答案:

答案 0 :(得分:8)

除非您需要支持真正的旧IE(显然使用不同的ActiveXObject),否则这是跨浏览器支持所必需的唯一内容。

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

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

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

jQuery

答案 1 :(得分:0)

XMLHttpRequest对象在此定义为W3C标准:

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

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

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

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

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