Ошибка типа: $ .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!");
});

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

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

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


2
включен ли jquery
Арун П Джонни

2
измените этот $ .ajax () ({на $ .ajax ({
Прабху Мурти

3
Вы вызвали $.ajaxбез arguments ( $.ajax()), а возвращаемое значение - объект jqXHR, который не является функцией. Следовательно $.ajax()(...)выкинет ошибку.
Феликс Клинг

2
Либо вы пропустили включение jquery.js, ИЛИ вы включили jquery.js ниже вызова функции ИЛИ, пожалуйста, попробуйте jQuery.ajax (замените $ на jQuery).
Пранай Бхардвадж

90
В моем случае это потому, что я использовал уменьшенную уменьшенную версию JQuery, которая выполняет функцию ajax
TomNg

Ответы:


952

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

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


56
Это то, что исправило мою проблему! Какого черта jQuery ?? Почему $.ajaxубирается из "стройной" сборки?
Самнау

57
Стройное телосложение унесло еще одну жертву.
Дрю Кеннеди

49
Я скопировал код из Bootstrap. Они используют тонкую версию. Может ты тоже?
Кирилл Н.

126

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


27

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

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

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


2
Это не синтаксическая ошибка. Ожидается, что возвращаемое значение будет функцией, которой нет.
Феликс Клинг

Аааа я вижу Так что, на самом деле, эта проблема - просто отсутствующая ссылка на файл сценария jQuery.
Джейсон Эванс

3
Посмотри на это как $.ajax()();. Это действительный JavaScript. Это означает «позвони $.ajaxи все, что он возвращает, позвони также». Но $.ajaxне возвращает функцию (которая может быть вызвана), она возвращает jqXHRобъект, поэтому выдает ошибку. Ваш ответ правильный, дополнительные ()проблемы, но описание проблемы неправильное (это не синтаксическая ошибка, по крайней мере, не для синтаксического анализатора).
Феликс Клинг

Нет, извините, это то, что я говорил в своем предыдущем комментарии; что это не проблема синтаксической ошибки, поскольку синтаксис действителен, а скорее проблема с файлом сценария jQuery, не загруженным во время использования $ .ajax ().
Джейсон Эванс

2
Нет, jquery.js не отсутствует (если бы это была ошибка $), но это не синтаксическая ошибка в том смысле, что это допустимый JS. Это просто не подходящий синтаксис для желаемого поведения, поэтому он вызывает ошибку во время выполнения, как объяснил Феликс.
nnnnnn

9

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

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


3
Это вообще не имеет отношения к вопросу, ни один из этих устаревших методов не используется с этим вопросом ..
Кевин Б.

3

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


3

Обратитесь к минимальной версии jquery, включающей ajax:

<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.

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


1

Если вы используете загрузочный 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 ) и $ .ajax используется в одном из суб-HTML.

Предположим, что во вложенном HTML-коде js включен через URL-адрес « https://code.jquery.com/jquery-3.5.0.js », а в базовый / родительский HTML- код через URL-адрес - « https: //code.jquery». .com / JQuery-3.1.1.slim.min.js ", тогда тонкая версия 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 » или любой другой последний URL-адрес, содержащий все библиотеки JQuery.

Спасибо Лили Х. за указание на этот ответ.


-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 совершенно бессмысленны и бесполезны.
Квентин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.