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


231

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

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

...在这里我称之为它,解析所需的参数:

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

但是,我的成功回调未运行(因为“成功!”未记录到控制台),并且控制台中出现错误:

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

这是什么意思?在成功事件触发$ .ajax内部的匿名函数之前,我已经完成了AJAX请求,但是现在我试图运行一个单独的命名函数(在本例中为回调)。我该怎么办?


2
是否包括jquery
Arun P Johny

2
将此$ .ajax()({更改为$ .ajax({
Prabhu Murthy

3
您在$.ajax不带参数($.ajax())的情况下调用了它,返回值是一个jqXHR对象,它不是一个函数。因此$.ajax()(...)会抛出错误。
Felix Kling

2
或者您错过了包含jquery.js的功能,或者您已将jquery.js包含在函数调用的下方,或者请尝试使用jQuery.ajax(用jQuery替换$)。
2013年

90
就我而言,这是因为我使用了
精简

Answers:


951

这里的答案都没有帮助我。问题是:我使用的是jQuery的苗条版本,其中删除了一些内容,其中ajax是其中之一。

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


56
这就是解决我的问题的原因!到底是什么jQuery?为什么$.ajax从“苗条”的构建中删除?
samnau

55
苗条的身材声称另一位受害者。
德鲁·肯尼迪

48
我从Bootstrap复制了代码。他们使用苗条的版本。也许你也是?
西里尔N.

126

仔细检查您是否使用的是完整版的jQu​​ery,而不是某些苗条版本。

我正在使用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"


27

不确定,但是看起来您的代码中有语法错误。尝试:

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

您旁边没有多余的括号$.ajax。如果仍然出现错误,则不会加载jQuery脚本文件。


2
这不是语法错误。只是期望返回值是一个不是的函数。
Felix Kling

嗯,我明白了。因此,实际上,这个问题只是缺少的jQuery脚本文件参考。
杰森·埃文斯

3
不。将其视为$.ajax()();。这是有效的JavaScript。它的意思是“调用$.ajax,无论返回什么,也调用它”。但是$.ajax不返回函数(可以调用),而是返回jqXHR对象,因此会引发错误。您的答案是正确的,另外一个()是问题,但是问题的描述不正确(这不是语法错误,至少对于语法分析器而言不是这样)。
Felix Kling 2013年

不,对不起,这就是我在先前的评论中所说的;这不是语法错误问题,因为语法是有效的,而是使用$ .ajax()时未加载jQuery脚本文件的问题。
杰森·埃文斯

2
不,jquery.js不会丢失(如果是该错误将与有关$),但这也不是语法错误,因为它是有效的JS。这不是所需行为的适当语法,因此会导致运行时错误,如Felix所述。
nnnnnn 2013年

9

结帐Jquery文档

弃用通知:从jQuery 3.0开始,删除了jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。您可以改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。


3
这是不相关的所有问题,没有这些过时的方法是在这个问题用..
凯文乙

3

您的AJAX函数有错误,括号过多,请尝试 $.ajax({


3

参考包括ajax的jquery min版本:

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

2

将括号放在ajax函数和另一组括号后以定义参数列表时会出现语法错误:-

如您所写:

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

必须删除有关ajax的括号,它应该是:-

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

1

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

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


1

如果您正在使用bootstrap html模板,请记住删除模板底部的jquery slim链接。我无法在此处发表评论,因此在此发布了此详细信息。


0

对于任何试图在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


-1

现在答案还为时已晚,但是此回答可能对将来的读者有所帮助。

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

假设在子HTML中,通过URL“ https://code.jquery.com/jquery-3.5.0.js ” 包含js ,在基本/父HTML中,通过URL-“ https://code.jquery包含js .com / jquery-3.1.1.slim.min.js ”,那么将在所有使用此子HTML以及上述基本HTML的页面上使用JS的超薄版本。

在使用引导框架使用“ 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.向我指出这个答案。


-2

让我分享我的经验:

我的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 覆盖它是毫无意义的,而且浪费带宽。
昆汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.