【问题标题】:Is there a jQuery stand-alone Ajax module?有 jQuery 独立的 Ajax 模块吗?
【发布时间】:2011-05-07 03:20:39
【问题描述】:

有没有办法获取 jQuery 的 Ajax 模块?关键是我不需要整个库,只需要它的 Ajax 模块(我需要在几个 iframe 中包含这个模块)。

【问题讨论】:

  • 如果选择包含整个库有什么问题吗?没那么重。
  • 即使在多个 iFrame 中使用,也只会下载一次。浏览器通常很聪明。使用缩小版。它只有 26kb。
  • iframe 来自不同的子域(如 sss.exemp.net 和 ggg.exemp.net)
  • 整个库不是一个选项。这就是为什么我在这里只询问部分。
  • 如果您在单个域上托管 jQuery,这不会成为问题。

标签: javascript jquery


【解决方案1】:

2016 年更新

您可以使用此工具构建您自己的自定义 jQuery 版本。

jQuery Builder

从 jQuery 2.1.1 开始

未缩小的完整文件大小为:241.55 Kb

Ajax 仅缩小为:49.60 Kb

尺寸减小了 5 倍

【讨论】:

  • 那个表格是怎么回事?如果我选择none 我得到Filesize: 187.84 Kb / Gzip: 55.69 Kb 这应该是0,如果我只选择ajax 然后我得到更多Filesize: 222.03 Kb / Gzip: 66.51 KbNO选项生成` 49.60 Kb`
  • @samayo 我编辑了我的帖子,以便您查看答案。
【解决方案2】:

正如达林所说,要么全有,要么全无。 JQuery 的 Ajax 函数与其他功能密切相关。

还有一些其他独立的 Ajax 库,例如 Matt Kruse's Ajax toolbox - 也许这会有所帮助。

我会考虑加载完整的 jQuery 库。如果你链接到jQuery on a CDN,,加载时间会很短。

【讨论】:

  • 我个人喜欢 amplify.js
  • @johnSmith Amplify.js 依赖 jQuery 来执行 Ajax 请求,这与 OP 想要的正好相反。
【解决方案3】:

另一种选择是使用浏览器提供的内置fetch API。

这里是一个例子 sn-p:

fetch('http://localhost:3000/users.json', {
  method: 'POST', 
  mode: 'cors', 
  redirect: 'follow',
  body: JSON.stringify({
     user: {
       firstName: 'john',
       lastName: 'doe'
     }
  }),
  headers: new Headers({ 'Content-Type': 'application/json' })
}).then(function() {
  /* handle response */
});

This blog post 是对 API 的精彩介绍,并展示了更多用例。

fetch 还没有完全的跨浏览器支持(我认为主要是 IE 和 Safari 缺乏),但是有一个 polyfill 可以在那天到来之前使用。

fetchpolyfill:https://github.com/github/fetch

旧版浏览器还需要一个 Promise polyfill(one optionanother option)。

【讨论】:

  • 我不建议在生产中使用 fetch。我刚刚在 safari 上遇到了一些奇怪的问题(在 macOS Sierra 和 iOS 10 上)。也许只是我太笨了,但我认为调试时间不值得。
  • 我在帖子中提到了这一点,并建议现在使用 polyfill。感谢您强调这个问题。
【解决方案4】:

从 jQuery 1.8 开始,您可以这样做:LINK

【讨论】:

    【解决方案5】:

    您可以在youmightnotneedjquery.com查看标准的 javascript 替代品 jQuery

    例如,$.ajax post 的替代方案是:

    var request = new XMLHttpRequest();
    request.open('POST', '/my/url', true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    request.send(data);
    

    $.ajax get 的替代方案是:

    var request = new XMLHttpRequest();
    request.open('GET', '/my/url', true);
    
    request.onload = function() {
      if (request.status >= 200 && request.status < 400) {
        // Success!
        var resp = request.responseText;
      } else {
        // We reached our target server, but it returned an error
    
      }
    };
    
    request.onerror = function() {
      // There was a connection error of some sort
    };
    
    request.send();
    

    【讨论】:

      【解决方案6】:

      我在这里创建了 jQuery 1.7.1 的自定义构建:

      https://github.com/dtjm/jquery/tree/ajaxonly

      【讨论】:

      【解决方案7】:

      AMD 用户请阅读this,我的答案是构建单个文件。
      或者直接使用这个库:ded / reqwest (4 KB, min & gzip)


      1. 下载source code并运行npn i

      2. 打开/src/jquery.js 并删除您不想要的任何模块,但保留"./exports/amd""./exports/global"

        define([
            "./ajax",
            "./ajax/xhr",
            "./ajax/script",
            "./ajax/jsonp",
            "./exports/amd",
            "./exports/global"
        ], function (jQuery) {
            "use strict";
            return jQuery;
        });
        
      3. 运行grunt custom:-sizzle

      4. 转到 /dist 并进行构建

      现在构建中的模块:

      • 核心
      • 推迟
      • ajax

      尺寸:

      • 只需构建:85 KB
      • 构建最小:26 KB
      • 使用 min 和 gzip 构建:10 KB

      【讨论】:

      【解决方案8】:

      如果你真的只想要 jQuery 的 Ajax 部分,你可以从他们的存储库 (https://github.com/jquery/jquery) 中获取代码,看一眼你会想看看“ajax.js”和“core.js”在“src”目录。然后,您可能希望将它们与闭包编译器或其他东西一起编译。

      但正如其他人所说,从大多数用户无论如何都会缓存的 CDN(jQuery、Google、Microsoft)之一加载它会容易得多。

      【讨论】:

        【解决方案9】:

        是的,我刚刚做了我的, http://noypi-linux.blogspot.com/2013/05/build-jquery-with-ajax-only.html

        你只需要这些文件(压缩后大约 30Kb):

        /d/dev/javascript/jquery/jquery/src/intro.js
        /d/dev/javascript/jquery/jquery/src/core.js
        /d/dev/javascript/jquery/jquery/src/callbacks.js
        /d/dev/javascript/jquery/jquery/src/deferred.js
        /d/dev/javascript/jquery/jquery/src/support.js
        /d/dev/javascript/jquery/jquery/src/data.js
        /d/dev/javascript/jquery/jquery/src/event.js
        /d/dev/javascript/jquery/jquery/src/serialize.js
        /d/dev/javascript/jquery/jquery/src/ajax.js
        /d/dev/javascript/jquery/jquery/src/ajax/xhr.js
        /d/dev/javascript/jquery/jquery/src/exports.js
         /d/dev/javascript/jquery/jquery/src/outro.js
        

        【讨论】:

        • 感谢您参考这篇文章。我在 github 上放了一个基于此的项目。它会进行一些全局重命名以避免冲突github.com/dbennett455/jqAjax
        • 30kb 对于 ajax() 来说是很多
        • 这是 jquery ajax。
        【解决方案10】:

        更新: 该库已从 GitHub 中删除,我建议改用 Fetch API。所有现代浏览器都支持它,无需 IE。

        旧答案: 你可以试试AJAJ。这是一个非常小的(小于 1kb gzipped)库来进行 ajax 调用。而且它的语法和jQuery非常相似。

        例如:

        ajaj({
          method: "POST",
          url: "/path/to/request",
          data: {
            name: "AJAJ",
            version: "1.0.0",
          },
          success: function (data) {
            console.log(data);
          },
          fail: function (error) {
            console.log(error);
          },
        });
        

        【讨论】:

          【解决方案11】:

          要么全有,要么全无。当然 jquery 是开源的,你可以在你自己的库中提取你感兴趣的部分(祝你好运)。您可以考虑使用 CDN,它可以确保大多数用户已经将其缓存在他们的浏览器中,因此您不必担心大小。

          【讨论】:

          • 没有错,这可能是一项具有挑战性的任务,当新版本的 jquery 出现时,如果您想使用这个新版本,您可能需要重新开始。
          • @fgf 只有当你真的,真的有一些额外的时间在你手上并且真的不知道如何处理它(比如,一两个月)从 jQuery 中提取部分是值得考虑的.
          • jQuery 现在是模块化的,所以这个答案不再相关:github.com/jquery/jquery#how-to-build-your-own-jquery
          【解决方案12】:

          没有开箱即用,但您当然可以从现有文件中剪切和粘贴,然后将其最小化。

          如果您只是担心从 Google 提供的 CDN 提供的库的大小,MS 或 jQuery 可能需要较少的数据流量,因为大多数浏览器已经缓存了文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-28
            • 2014-10-06
            • 1970-01-01
            • 2013-10-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多