TypeError: $.ajax(...) не является функцией?

Я пытаюсь создать простой запрос 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!");
});

Тем не менее, мой успешный обратный вызов не запускается (так как "success!" не зарегистрирован в консоли), и в консоли появляется ошибка:

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

Что это значит? Ранее я выполнял запросы AJAX, когда событие успеха вызывает анонимную функцию внутри $.ajax, но сейчас я пытаюсь запустить отдельную именованную функцию (в данном случае, обратный вызов). Как мне это сделать?

Ответ 1

Ни один из ответов здесь не помог мне. Проблема была в том, что я использовал тонкую сборку jQuery, которая удалила некоторые вещи, ajax был одним из них.

Решение. Просто скачайте обычную (сжатую или не) версию jQuery здесь и включите ее в свой проект.

Ответ 2

Дважды проверьте, используете ли вы полную версию jquery, а не какую-то тонкую версию.

Я использовал ссылку jQuery cdn-script, которая поставляется с jquery. Проблема заключается в том, что по умолчанию это slim.jquery.js, который не имеет в нем функции ajax. Итак, если вы используете (скопированный с сайта Bootstrap) тонкую версию jquery script link, используйте полную версию.

То есть используйте <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"

Ответ 3

Не уверен, но похоже, что у вас есть синтаксическая ошибка в коде. Пытаться:

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

У вас были дополнительные скобки рядом с $.ajax которые не нужны. Если вы все еще получаете ошибку, тогда файл сценария jQuery не загружается.

Ответ 4

Оформить заказ Документация JQuery

Уведомление об изъятии: обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() удаляются с jQuery 3.0. Вместо этого вы можете использовать jqXHR.done(), jqXHR.fail() и jqXHR.always().

Ответ 5

У вас есть ошибка в вашей функции AJAX, слишком много скобок, вместо этого вместо $.ajax({

Ответ 6

Существует синтаксическая ошибка, так как вы разместили скобки после функции ajax и еще один набор скобок для определения списка аргументов:

Как вы написали: -

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

Скобка вокруг ajax должна быть удалена, она должна быть: -

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

Ответ 7

Ссылка на минимальную версию jquery, включающую ajax:

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

Ответ 8

Я столкнулся с тем же вопросом, и моим решением было: добавить сценарий JQuery.

В частности, мы должны убедиться, что соответствующий JQuery загружен, когда мы отлаживаем наши js под firefox/chrome.

Ответ 9

Для тех, кто пытается запустить это в 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);
});

(кредиты: fooobar.com/questions/14878/...)

Ответ 10

Если вы используете загрузочный HTML-шаблон, не забудьте удалить ссылку на jquery slim в нижней части шаблона. Я публикую эту деталь здесь, так как пока не могу комментировать ответы..