TypeError:$ .ajax(...)不是函数?

Rea*_*ues 176 ajax jquery json

我正在尝试创建一个简单的AJAX请求,它从MySQL数据库返回一些数据.这是我的功能如下:

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

......这就是我所说的,解析所需的参数:

AJAXrequest('voting.ajax.php', imageData, function(data) {
    console.log("success!");
});
Run Code Online (Sandbox Code Playgroud)

然而,我的成功回调没有运行(因为"成功!"没有记录到控制台),我在控制台中收到错误:

TypeError: $.ajax(...) is not a function.
success: callback
Run Code Online (Sandbox Code Playgroud)

这是什么意思?在成功事件触发$ .ajax内部的匿名函数之前,我已经完成了AJAX请求,但现在我正在尝试运行一个单独的命名函数(在这种情况下,是一个回调).我该怎么做?

Gus*_*Gus 762

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

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

  • 这就解决了我的问题!什么是jQuery?为什么`$ .ajax`从"苗条"版本中删除? (47认同)
  • 苗条的构建声称另一个受害者. (36认同)
  • 我从Bootstrap复制了代码.他们使用超薄版本.也许你呢? (36认同)
  • 这个答案到2020年9月13日仍然有用哈哈!东非再次投赞成票! (4认同)
  • 感谢那.我永远不会猜到解决方案是他们删除了其中一个典型特征. (2认同)
  • 2022 年,苗条仍然缺席 (2认同)

kar*_*iks 110

仔细检查您是否使用完整版本的jquery而不是一些超薄版本.

我正在使用jquery附带的jquery cdn-script链接.问题是这个默认情况下是slim.jquery.js,它没有这个ajax功能.因此,如果您正在使用(从Bootstrap网站复制粘贴)slim版本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"


Jas*_*ans 25

不确定,但看起来您的代码中存在语法错误.尝试:

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

你旁边有额外的括号$.ajax,不需要.如果仍然出现错误,则不会加载jQuery脚本文件.

  • 不.把它看作`$ .ajax()();`.这是有效的JavaScript.这意味着"调用`$ .ajax`及其返回的内容,也称之为".但是`$ .ajax`不会返回一个函数(可以调用它),它会返回一个`jqXHR`对象,所以它会抛出一个错误.你的答案是正确的,附加的`()`是问题,但问题的描述不正确(这不是语法错误,至少不是解析器). (3认同)
  • 这不是语法错误.预期返回值是一个它不是的函数. (2认同)
  • 不,jquery.js不会丢失(如果错误是关于`$`),但它不是语法错误,因为它是有效的JS.它只是不适合所需行为的语法,因此会导致运行时错误,如Felix所述. (2认同)

Mah*_*bub 9

Checkout Jquery文档

弃用注意:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调将被删除.您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()代替.

  • 这根本与问题无关,该问题没有使用任何不赞成使用的方法。 (2认同)

Lee*_*ans 8

我使用了以下版本的 jQuery 并且它有效

<script src="https://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud)


小智 7

参考包含 ajax 的 jquery min 版本:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Zaf*_*eem 6

不要使用jQuery 的精简版,它没有 ajax 功能。使用缩小版本,而不是https://releases.jquery.com/

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