46 votes

Mon javascript renvoie cette erreur : $.ajax n'est pas une fonction.

Je ne suis pas sûr de ce qui ne va pas, mais j'obtiens cette erreur dans la console de chrome :

jquery-3.2.1.slim.min.js:1244 jQuery.Deferred exception: $.ajax is not a function TypeError: $.ajax is not a function
    at HTMLDocument.<anonymous> (file:///C:/Users/Adam/Desktop/UseTime/js/example.js:3:7)
    at j (file:///C:/Users/Adam/Desktop/UseTime/js/jquery-3.2.1.slim.min.js:1193:55)
    at k (file:///C:/Users/Adam/Desktop/UseTime/js/jquery-3.2.1.slim.min.js:1199:45) undefined
r.Deferred.exceptionHook @ jquery-3.2.1.slim.min.js:1244
jquery-3.2.1.slim.min.js:1247 Uncaught TypeError: $.ajax is not a function
    at HTMLDocument.<anonymous> (example.js:3)
    at j (jquery-3.2.1.slim.min.js:1193)
    at k (jquery-3.2.1.slim.min.js:1199)

De ce JavaScript :

$(function() { //when the DOM is ready
    var times; //declare global variable
    $.ajax({ //set up request
        beforeSend: function (xhr) { //before requesting data
            if (xhr.overrideMimeType) { //if supported
                xhr.overrideMimeType("application/json"); // set MIME to prevent errors
            }
        }
    });
    //funciton that collect data from the json file
    function loadTimetable() { //decalre function
        $.getJSON('data/example.json') //try to collect json data
            .done(function (data) { //if succesful
                times = data; //store in variable
            }).fail(function () { //if a problem: show message
                $('#event').html('Sorry! we couldnt load your time table at the moment');
            });
    }
    loadTimetable(); //call the function

    //CLICK ON TEH EVENT TO LOAD A TIME TABLE
    $('#content').on('click', '#event a', function (e) { //user clicks on place
        e.preventDefault(); //prevent loading page
        var loc = this.id.toUpperCase(); //get value of id attr
        var newContent = "";
        for (var i = 0; i < times[loc].length; i++) { // loop through sessions
            newContent += '<li><span class = "time">' + times[loc][i].time + '</span>';
            newContent += '<a href = "descriptions.html#';
            newContent += times[loc][i].title.replace(/ /g, '-') + '">';
            newContent += times[loc][i].title + '</a></li>';
        }
        $('#sessions').html('<ul>' + newContent + '</ul>'); // Display Time
        $('#event a.current').removeClass('current'); // update selected link
        $(this).addClass('current');
        $('#details').text('');
    });

    //CLICK ON A SESSION TO LEAD THE DESCRIPTION
    $('#content').on('click', '#sessions li a', function (e) { //click on session
        e.preventDefault(); // prevent loading
        var fragment = this.href; //title is in href
        fragment = fragment.replace('#', ' #'); //Add Space before #
        $('#details').load(fragment); //to load info
        $('#sessions a.current').removeClass('current'); //update selected
    });

    //CLICK ON PRIMARY NAVIGATION
    $('nav a').on('click', function (e) { //click on nav
        e.preventDefault(); //prevent loading
        var url = this.href; //get UR: to load
        $('nav a.current').removeClass('current');
        $(this).addClass('current');
        $('#container').remove(); //remove old
        $('#content').load(url + ' #container').hide().fadeIn('slow'); // add new
    });
});

Je ne sais pas s'il s'agit d'un problème lié à la façon dont j'initie .ajax ou si mon jquery n'est pas correctement implémenté. Je pense que c'est le cas. Des idées ?

edit : voici le html qui va avec le script ci-dessus

<!DOCTYPE html>

<body>
    <header>
        <h1>UseTime</h1>
        <nav>
            <a href="jq-load.html">HOME</a>
            <a href="jq-load.html2">PROFILE</a>
            <a href="jq-load.html4">MANAGE TASKS</a>
            <a href="usetime.html">TIME TABLE</a>
        </nav>
    </header>
    <section id="content">
        <div id="container">
            <div class="third">
                <div id="event">
                    <a id="class1" href="class1.html"><img src="" alt="class1" /> Class 1 </a>
                    <a id="class2" href="class2.html"><img src="" alt="class2" /> Class 2 </a>
                    <a id="class3" href="class3.html"><img src="" alt="class3" /> Class 3 </a>
                </div>
            </div>
            <div class="third">
                <div id="sessions"> Select a Class from the left </div>
            </div>
            <div class="third">
                <div id="details"> Details </div>
            </div>
        </div>
        <!-- container -->
    </section>
    <!-- content -->

    <script src="js/jquery-3.2.1.slim.min.js"></script>
    <script src="js/example.js"></script>
</body>

0 votes

Liez vous un jQuery à votre code ??? Liez le Jquery avant tout autre javascript. Cela peut fonctionner.

1 votes

Oui oui c'est dans le html qui appelle ça, je vais le mettre dans le post

141voto

AdhershMNair Points 2062

Vous utilisez la petite version de jQuery. Elle ne supporte pas l'appel ajax. Utilisez

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

à la place de celui-ci.

Faible corpulence

Parfois, vous n'avez pas besoin d'ajax, ou vous préférez utiliser l'un des nombreux systèmes de gestion de l'information. bibliothèques autonomes qui se concentrent sur les requêtes ajax. Et souvent, il est plus simple d'utiliser une combinaison de CSS et de manipulation de classes pour toutes vos animations web. En plus de la version ordinaire de jQuery que inclut les modules ajax et effects, nous avons publié une version "slim" qui exclut ces modules. qui exclut ces modules. Dans l'ensemble, elle exclut ajax, effects, et le code actuellement déprécié. La taille de jQuery est très rarement un problème de performance de charge de nos jours. un problème de performance de charge de nos jours, mais la version allégée fait environ 6k octets gzippés de moins que la version normale - 23.6k contre 30k. Ces fichiers fichiers sont également disponibles dans le paquet npm et sur le CDN :

https://code.jquery.com/jquery-3.1.1.slim.js
https://code.jquery.com/jquery-3.1.1.slim.min.js

Renvoyé par Blog jQuery

1 votes

Ohhhh je ne savais pas ça, c'est logique, je vais essayer. Merci

0 votes

Vous pouvez le consulter à partir d'ici. blog.jquery.com/2016/09/22/jquery-3-1-1-released

2 votes

Cette réponse est de l'or pur Elle m'a pris 2 heures. Pourquoi suppriment-ils AJAX ? C'est l'une des meilleures fonctions de JQuery.

12voto

Arun Points 1277

La petite version de jQuery 3 ne supporte pas ajax.

Selon le publier les documents ,

En plus de la version normale de jQuery qui comprend les fonctions ajax et effets, nous publions une version "slim" qui exclut ces modules. modules. En somme, il exclut ajax les effets, et actuellement code déprécié.

Pour utiliser .ajax il suffit d'utiliser la version complète de la méthode.

Essayez celui-ci (jquery-3.2.1.min.js) au lieu de slim (jquery-3.2.1.slim.min.js)

  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X