web-dev-qa-db-fra.com

TypeError: $ .ajax (...) n'est pas une fonction?

J'essaie de créer une simple requête AJAX qui renvoie des données d'une base de données MySQL. Voici ma fonction ci-dessous:

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

... et voici où je l'appelle, en analysant les paramètres requis:

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

Pourtant, mon rappel de succès ne s'exécute pas (car "success!" N'est pas connecté à la console) et j'obtiens une erreur dans ma console:

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

Qu'est-ce que ça veut dire? J'ai déjà fait AJAX demandes auparavant où l'événement success déclenche une fonction anonyme dans $ .ajax, mais j'essaie maintenant de lancer une fonction nommée distincte (dans ce cas, un rappel). Comment puis-je m'y prendre?

153

Aucune des réponses ici ne m'a aidé. Le problème était le suivant: J'utilisais la version simplifiée de jQuery , qui supprimait certaines choses, dont ajax.

La solution: il suffit de télécharger la version régulière (compressée ou non) de jQuery ici et de l’inclure dans votre projet.

692
Gus

Vérifiez si vous utilisez la version complète de jQuery et non une version slim.

J'utilisais le lien jquery cdn-script fourni avec jquery. Le problème est celui par défaut, slim.jquery.js, qui ne contient pas la fonction ajax. Donc, si vous utilisez (copie-collée à partir du Bootstrap site Web) lien de script de la version slim jquery, utilisez plutôt la version complète.

C'est-à-dire utiliser <script src="https://code.jquery.com/jquery-3.1.1.min.js"> au lieu de <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"

103
karthiks

Pas sûr, mais il semble que vous ayez une erreur de syntaxe dans votre code. Essayer:

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

Vous aviez des crochets supplémentaires à côté de $.ajax qui n'étaient pas nécessaires. Si l'erreur persiste, le fichier de script jQuery n'est pas chargé.

25
Jason Evans

Commander The Jquery Documentation

Avis de dépréciation : Les rappels jqXHR.success (), jqXHR.error () et jqXHR.complete () sont supprimés à compter de jQuery 3.0. Vous pouvez utiliser jqXHR.done (), jqXHR.fail () et jqXHR.always () à la place.

10
Mahbub

Vous avez une erreur dans votre fonction AJAX, trop de crochets, essayez plutôt $.ajax({

3
netvision73

Il y a une erreur de syntaxe car vous avez placé des parenthèses après la fonction ajax et un autre ensemble de parenthèses pour définir la liste d'arguments: -

Comme vous l'avez écrit:

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

La parenthèse autour d'ajax doit être supprimée, elle devrait être: -

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

J'ai rencontré la même question et ma solution était la suivante: ajoutez le script JQuery.

Surtout, nous devrions nous assurer que le JQuery correspondant est chargé lorsque nous déboguons notre js sous le firefox/chrome.

1
Jianeng Xu

Pour ceux qui essaient d'exécuter ceci dans nodejs : Cela ne fonctionnera pas immédiatement, car jquery a besoin d'un navigateur (ou similaire)! J'essayais simplement de lancer l'import et je consignais console.log($) qui écrivait [Function], puis aussi console.log($.ajax) qui renvoyait undefined. Je n'avais pas d'erreurs tsc et j'avais autocomplete de intellij, alors je me demandais ce qui se passait.

Puis, à un moment donné, j'ai réalisé que node était peut-être le problème et non pas TypeScript. J'ai essayé le même code dans le navigateur et cela a fonctionné. Pour que cela fonctionne, vous devez exécuter:

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

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

(crédits: https://stackoverflow.com/a/4129032/3022127 )

0
bersling

Référencez la version jquery min qui inclut ajax:

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