我试图创建一个AJAX请求。下面是我的函数定义:

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

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

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

然而回调没有运行,相反,我得到一个console.error:

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

Why?


当前回答

不要使用jQuery的精简版本,它没有ajax功能。请使用https://releases.jquery.com/上的简化版本

注意:请确保不要使用从Bootstrap网站复制的jquery链接,因为他们使用的是精简版。

其他回答

不确定,但看起来你的代码中有一个语法错误。试一试:

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

$旁边有额外的括号。这些都是不需要的。如果仍然得到错误,则不会加载jQuery脚本文件。

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

然后在某个时候,我意识到节点可能是问题,而不是typescript。我在浏览器中尝试了相同的代码,它工作了。为了让它工作,你需要运行:

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

    var $ = require("jquery")(window);
});

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

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

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

你有一个错误在你的AJAX函数,括号太多,尝试代替$.ajax({

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

我使用的是jquery cdn-script链接自带的jquery。问题是这个默认是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 "