Bonjour
J'ai suivi un tuto sur le net qui fait appel à ajax() en jquery pour rechager les information de la page. Ça marche très bien sur firefox et chrome, mais pas sur IE 8 (pas testé le 7 ni le 9. J'ai cru comprendre que les différentes versions de IE avaient des implémentations différentes de l'objet xmlhttprequest. Est-ce que ça peut venir de là ?
J'ai aussi fait des recherches sur le site de jquery mais je n'ai pas trouvé d'informations sur le support des navigateurs pour ajax().

Quelqu'un aurait une info ?

12 réponses


Bonsoir, avec un morceau de code c'est mieux.

Normalement la fonction ajax de jquery est compatible ie6,7,8,9

Lefrein
Auteur

Bonsoir
"Normalement la fonction ajax de jquery est compatible ie6,7,8,9"
Justement, c'est ce que je veux savoir, c'est pour ça que j'ai inclus de code.

Voici le script jquery utilisé :

function count_messages()
        {
            $.ajax({
                url:'count_messages.php',
                success:function(data)
                {
                    if(data != 0)
                    {
                        $('#nombre').show(200);
                        $('#nombre').html(data); //TODO ajouetr éléments HTML
                    } 
                } 
            });
            setTimeout('count_messages()', 10000);
        }
        function get_messages()
        {
            $.ajax({
                url:'get_messages.php',
                success:function(data)
                {
                    $('#news').fadeIn(1000).html(data);
                    $('#nombre').hide(200);
                    $('#messages').css('border-top', '2px solid #ccc');
                } 
            }) 
        };
        function update()
        {
            $.ajax({
                url:'update.php',
                success:function(data)
                {
                } 
            }) 
        };
        $(document).ready(function()
        {
            count_messages();
            $('#nombre').click(function(){
                    get_messages();
                    update();
            });
        });

J'espère que c'est ce que tu demandais.

Donc en gros ce script se charge de vérifier en bdd si il y a de nouveaux messages et d'afficher leur compte dans une div avec show().
L'auteur du tuto m'a dit que ça pouvait venir de l'intégration. Je dois reconnaître que j'y avais pas pensé, c'est vrai que ça peut venir de là mais là je ne peux pas vérifier dans l'immédiat.

EDIT : après test en VM sur IE6 et IE8, on ne dirait pas un problème de CSS. Le contenu de la div #nombre n'est pas mis à jour, ça a l'air d'être la fonction count_messages() ne fonctionne pas.
Est-ce ajax() ou la syntaxe qui chie à un moment ou un autre ?

Moi j'utilise plus la fonciton $.post() que $.ajax().Elle est plus simple. Moins de paramètres à mettre.

Lefrein
Auteur

Ben moi pour l'instant j'ai surtout utilisé ajax() parce que c'est le tuto qui est fait comme ça. Rien contre l'idée d'utiliser post() mais il faudrait que je connaisse un peu plus ces fonctions.
Tu adaptes ton code pour IE ?

As-tu essayé de regarder dans les navigateurs en question si tu recevais bien la bonne valeur ?
Si, ligne 10, tu mets un alert( data ); , ça te retourne quoi ?
Essaie de voir un peu les valeurs que tu reçois, sans plus d'infos, c'est difficile de t'aider plus...

Lefrein
Auteur

Oui, j'ai essayé, je l'ai indiqué plus haut. Le fait que ma div #nombre n'ait pas de contenu me semblait suffisant.

Mais j'ai appliqué ton idée (ok je suis nul en débuggage :D) et alert(data) ne renvoie rien en ligne 10 par contre en ligne 6 il me renvoie 0 alors que ça devrait être 1 ; je regarde donc mon fichier count_message.php mais je ne trouve pas de différence avec le fichier du tuto, voici son contenu :

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=tutos_ajax', 'bidule', 'truc');
}
catch (Exception $e)
{
    echo 'Erreur : '.$e -> getMessage().'<br />';
    echo 'N° : '.$e -> getCode();
}
$req = $bdd->prepare('SELECT COUNT(*) as total FROM msg_twitter WHERE lu = 0 ORDER BY ID DESC');
$req->execute();
$data = $req->fetch(PDO::FETCH_OBJ);
echo $data->total;

Je comprend pas d'où ça peut venir.

Et quand tu exécutes ta requête mysql dans phpmyadmin ou chive, le résultat est bien celui que tu attends ?

Lefrein
Auteur

Oui je viens de tester, ça fonctionne. De toute façon ça fonctionne dans les autres navigateurs, je pense pas que la requête pose problème, pour moi c'est plus le javascript. Merci au fait pour ton aide.

C'est pas en ligne quelque part, qu'on puisse investiguer ?

Lefrein
Auteur

oui : site de test
Et une archive des fichiers sources du tuto : http://dl.dropbox.com/u/1658815/ajax_twitter.zip

Sur Chrome/Mac, le résultat renvoyé par count_messages.php, c'est 0.
Pareil pour Firefox/Mac.
Du coup, vu ton code js, je crois que c'est logique que tu n'affiches rien, puisque tu ne fais rien si data vaut 0.
Ou alors, je comprends complètement pas ce que tu veux faire.

Lefrein
Auteur

Heu forcément, j'ai oublié de te donner l'adresse du formulaire : http://www.1adesign.fr/test/messagerie_twitter/form.php que tu ouvre dans un autre onglet ou un autre navigateur comme tu veux. Désolé pour cet oubli.

EDIT : Moi aussi je suis sur mac mais ça n'a pas d'incidence, une amie l'a testé sur Firefox/windows xp et ça marche, par contre sur IE8/windows XP ça ne marche pas.

Normalement, tu remplis le formulaire et dans les 10 secondes sur la page des messages une div apparaît et indique un nombre de message(s) non lu(s). C'est le contenu de data.