【问题标题】:TypeError: $.ajax(...) is not a function?TypeError: $.ajax(...) 不是函数?
【发布时间】:2013-08-18 17:43:08
【问题描述】:

我正在创建一个简单的 AJAX 请求,它会从数据库中返回一些数据。下面是我的功能:

function AJAXrequest(url, postedData, callback) {
    $.ajax({
        type: 'POST',
        url: url,
        data: postedData,
        dataType: 'json',
        success: callback
    });
}

这里是我调用它的地方,提供所需的参数:

AJAXrequest('voting.ajax.php', imageData, function(data) {
    // function body
});

然而,回调没有运行,而是在控制台中出现错误:

TypeError: $.ajax(...) is not a function.

为什么?在成功事件触发 $.ajax 内的匿名函数之前,我已经完成了 AJAX 请求,但现在我正在尝试运行一个单独命名的函数。我该怎么办?

【问题讨论】:

  • 是否包含jquery
  • 改变这个 $.ajax() ({ 到 $.ajax({
  • 您在没有参数的情况下调用了$.ajax ($.ajax()),返回值是一个 jqXHR 对象,它不是函数。因此$.ajax()(...) 会抛出一个错误。
  • 要么你错过了包含 jquery.js 要么你在函数调用下面包含了 jquery.js 要么请尝试 jQuery.ajax(用 jQuery 替换 $)。
  • 在我的例子中,这是因为我使用了 slim minified 版本的 JQuery,它取出了 ajax 函数

标签: jquery ajax json


【解决方案1】:

这里的答案都没有帮助我。问题是:我使用的是 jQuery 的精简版本,它删除了一些东西,ajax 就是其中之一。

解决方案:只需下载 jQuery here 的常规(压缩或非压缩)版本并将其包含在您的项目中。

【讨论】:

  • 这解决了我的问题!什么是 jQuery?为什么 $.ajax 从“slim”构建中删除?
  • Slim build 声称另一个受害者。
  • 我从 Bootstrap 复制了代码。他们使用纤薄的版本。也许你也是?
  • 这个答案在2020年9月13日还是有用的哈哈!东非再次投赞成票!
  • 2022 年,slim 仍然想念它
【解决方案2】:

仔细检查您是否使用的是完整版的 jquery 而不是一些精简版。

我使用的是 jquery 附带的 jquery cdn-script 链接。问题是这个默认情况下是 slim.jquery.js,它没有 ajax 函数。因此,如果您使用的是(从 Bootstrap 网站复制粘贴)精简版 jquery 脚本链接,请改用完整版。

也就是说使用 <script src="https://code.jquery.com/jquery-3.1.1.min.js"> 代替 <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"

【讨论】:

  • 考虑到文件大小,对于大多数人来说,使用包含 Ajax 的最小构建将是一个更好的解决方案。请参阅下面的@Daniel Mendoza 答案
【解决方案3】:

不确定,但您的代码中似乎存在语法错误。试试:

$.ajax({
  type: 'POST',
  url: url,
  data: postedData,
  dataType: 'json',
  success: callback
});

$.ajax 旁边有多余的括号,它们是不需要的。如果仍然出现错误,则 jQuery 脚本文件未加载。

【讨论】:

  • 不是语法错误。返回值应该是一个函数,但它不是。
  • 啊,我明白了。所以说真的,这个问题真的只是缺少 jQuery 脚本文件引用。
  • 没有。将其视为$.ajax()();。这是有效的 JavaScript。它的意思是“调用$.ajax,无论它返回什么,也调用它”。但是$.ajax 不返回一个函数(可以调用),它返回一个jqXHR 对象,所以它会抛出一个错误。你的答案是正确的,额外的() 是问题,但问题的描述不正确(这不是语法错误,至少不是解析器)。
  • 不,抱歉,这就是我在之前的评论中所说的;这不是语法错误问题,因为语法是有效的,而是在使用 $.ajax() 时未加载 jQuery 脚本文件的问题。
  • 不,jquery.js 没有丢失(如果是错误将是关于$),但它也不是语法错误,因为它是有效的 JS。它只是不适合所需行为的语法,因此会导致 Felix 解释的运行时错误。
【解决方案4】:

参考包含ajax的jquery min版本:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

【讨论】:

    【解决方案5】:

    我使用了以下版本的 jQuery,它工作正常

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
    

    【讨论】:

      【解决方案6】:

      不要使用 jQuery 的 slim 版本,它没有 ajax 功能。使用 full 版本,而不是 https://jquery.com/download/

      注意:确保不要使用从 Bootstrap 网站复制的 jquery 链接,因为它们使用的是 slim 版本。

      【讨论】:

        【解决方案7】:

        你的AJAX函数有错误,括号太多,试试$.ajax({

        【讨论】:

          【解决方案8】:

          有一个语法错误,因为您在 ajax 函数和另一组括号后放置了括号来定义参数列表:-

          正如你所写:-

          $.ajax() ({
              type: 'POST',
              url: url,
              data: postedData,
              dataType: 'json',
              success: callback
          });
          

          ajax 的括号必须去掉,应该是:-

          $.ajax({
              type: 'POST',
              url: url,
              data: postedData,
              dataType: 'json',
              success: callback
          });
          

          【讨论】:

            【解决方案9】:

            我知道这是一篇旧帖子——Gus 基本上回答了它。 但根据我的经验,JQuery 已经更改了他们从 CDN 导入的代码 - 所以我想我会继续发布他们从 CDN 导入的最新代码:

            <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
            

            【讨论】:

              【解决方案10】:

              我遇到了同样的问题,我的解决方法是:添加 JQuery 脚本。

              特别是在firefox/chrome下调试我们的js时,要确保加载了对应的JQuery。

              【讨论】:

                【解决方案11】:

                如果您使用的是 bootstrap html 模板,请记住删除模板底部的 jquery slim 链接。我在这里发布这个细节,因为我还不能评论答案..

                【讨论】:

                  【解决方案12】:

                  对于任何试图在 nodejs 中运行它的人:它不会开箱即用,因为 jquery 需要一个浏览器(或类似的)!我只是想让导入运行并记录console.log($),它写了[Function],然后还有console.log($.ajax),它返回了undefined。我没有 tsc 错误,并且从 intellij 自动完成,所以我想知道发生了什么。

                  然后在某个时候,我意识到node 可能是问题所在,而不是打字稿。我在浏览器中尝试了相同的代码并且它有效。要使其工作,您需要运行:

                  require("jsdom").env("", function(err, window) {
                      if (err) {
                          console.error(err);
                          return;
                      }
                  
                      var $ = require("jquery")(window);
                  });
                  

                  (学分:https://stackoverflow.com/a/4129032/3022127

                  【讨论】:

                    【解决方案13】:

                    现在回答为时已晚,但此回复可能对未来的读者有所帮助。

                    我想分享一个场景,假设有多个 html 文件(一个基本 html 和多个子 HTML),并且其中一个子 HTML 中使用了 $.ajax。

                    假设在子 HTML 中,js 通过 URL "https://code.jquery.com/jquery-3.5.0.js" 包含在基础/父 HTML 中,通过 URL -"https://code.jquery.com/jquery-3.1.1.slim.min.js",那么瘦版本的 JS 将在所有页面中使用使用这个子 HTML 以及上面提到的基本 HTML。

                    在使用引导框架的情况下尤其如此,该框架使用“https://code.jquery.com/jquery-3.1.1.slim.min.js”加载 js。

                    所以要解决这个问题,需要确保在所有页面中,通过 URL“https://code.jquery.com/jquery-3.5.0.js”或包含所有 JQuery 库的最新 URL 包含 js。

                    感谢 Lily H. 指出我的答案。

                    【讨论】:

                      【解决方案14】:
                      1. JQuery官网:Click me

                      2. 选择你需要的版本(建议使用最新的稳定版本)并点击解压按钮

                      3. 复制对话框中的脚本并粘贴到您的代码中:

                      【讨论】:

                        【解决方案15】:

                        让我分享一下我的经验:

                        我的 html 页面设计器使用:

                        <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
                        

                        当我创建一个简单的 AJAX 请求时,收到一条错误消息, TypeError: $.ajax(...) 不是函数

                        所以,我补充一下:

                        <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
                        

                        那么,它至少对我很有效。

                        【讨论】:

                        • 没有。加载 jQuery slim,然后立即用 jQuery 覆盖它完全没有意义,而且浪费带宽。
                        【解决方案16】:

                        这是您的 jquery 版本的问题。 看这里 https://code.jquery.com/ 并添加此脚本

                        <script
                          src="https://code.jquery.com/jquery-3.5.1.js"
                          integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="
                          crossorigin="anonymous">
                        </script>
                        

                        【讨论】:

                          猜你喜欢
                          • 2020-05-01
                          • 2016-10-25
                          • 2017-09-10
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-02-03
                          相关资源
                          最近更新 更多