Ошибка типа: $ .ajax (…) не является функцией?

49

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

на странице voting.ajax.php, я сейчас просто возвращаю переменную JSON, равную 1 для тестирования:

$someNumber = 1;
return json_encode($someNumber);

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

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

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

  • 2
    включен ли jquery
  • 2
    измените этот $ .ajax () ({на $ .ajax ({
Показать ещё 6 комментариев
Теги:

8 ответов

367
Лучший ответ

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

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

  • 38
    Это то, что исправило мою проблему! Какого черта jQuery ?? Почему $.ajax удаляется из «стройной» сборки?
  • 23
    Стройное телосложение унесло еще одну жертву.
Показать ещё 7 комментариев
75

Дважды проверьте, используете ли вы полную версию 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"

24

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

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

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

  • 2
    Это не синтаксическая ошибка. Ожидается, что возвращаемое значение будет функцией, которой нет.
  • 0
    Аааа, я вижу. На самом деле, эта проблема - просто отсутствующая ссылка на файл сценария jQuery.
Показать ещё 6 комментариев
10

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

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

4

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

3

Существует синтаксическая ошибка, так как вы разместили скобки после функции 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

Для тех, кто пытается запустить это в 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/questions/1801160/can-i-use-jquery-with-node-js)

1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню