Bonjour à tous,

Certain me connaisse depuis le temps avec mon site d'avion et l'a j'ai un soucis quelque étrange avec une simple requete ajax, mais qui ne passe pas sur FIreFox uniquement, même Edge fonctionne.

Sur mon site : http://ffsimulateur2.fr/index.php?page=map
a intervalle régulier, j'interroge un script php qui me retourne 3 possibilités.
-RIen (car pas de message)
-'blink'(car des messages sont à lire)
-les messages

S'il y a des message, le coeur vert se met à clignoter, et en cliquant dessus, une fenêtre s'ouvre.

Voici le code du script js

setInterval(function()
        { 

            var user ='<?=$user->data["user_id"] ?>';
            var String = 'user='+user+'&mod=nb';
            var Url="./type/membre/outils/msg_retrive.php";

            var xhr = getHttpRequest();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status == 200) {
                    result=xhr.responseText;
                    //console.log(result);
                    if (result == "" || result == "NULL") {
                        document.getElementById("to_blink").className = document.getElementById("to_blink").className.replace( /(?:^|\s)blink_me(?!\S)/g , '' );

                    }
                    else {
                        document.getElementById("to_blink").className = document.getElementById("to_blink").className.replace( /(?:^|\s)blink_me(?!\S)/g , '' );
                        document.getElementById("to_blink").className += " blink_me";
                    }
                }
            };
            xhr.open('GET', Url , true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(String);

            (function blink() { 
                $('.blink_me').fadeOut(500).fadeIn(500, blink); 
            })();

        }, 10000);

        document.getElementById("read_my_message").addEventListener("click", function () {
            var user ='<?=$user->data["user_id"] ?>';
            var String = 'user='+user+'&mod=read';
            var Url="./type/membre/outils/msg_retrive.php";

            var xhr = getHttpRequest();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status == 200) {
                    result=xhr.responseText;
                    console.log(result);
                    if (result == "" || result == "NULL") {
                        document.getElementById('message_div').innerHTML = '';

                    }
                    else {
                        document.getElementById('message_div').innerHTML = result;
                    }
                }
            };
            xhr.open('GET', Url , true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(String);

        });
        document.getElementById("del_all_messages").addEventListener("click", function () {
            var user ='<?=$user->data["user_id"] ?>';
            var String = 'user='+user+'&mod=erase';
            var Url="./type/membre/outils/msg_retrive.php";

            var xhr = getHttpRequest();
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4 && xhr.status == 200) {
                    result=xhr.responseText;
                    //console.log(result);
                    if (result == "" || result == "NULL") {
                        document.getElementById('message_div').innerHTML = '';

                    }
                    else {
                        document.getElementById('message_div').innerHTML = result;
                    }
                }
            };
            xhr.open('GET', Url , true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send(String);

        });

et voici le code php retrive.php

 <?php
error_reporting (E_ERROR | E_WARNING | E_PARSE);

//intégration de fichier de configuration général du site
require_once ($_SERVER["DOCUMENT_ROOT"] . '/core/config/config_gen.php');

//intégration du gestionnaire de class site
require_once (mark_5 . '/core/app/Auto_loader.php');
Auto_loader::register ();

$db_m_5 = Db_mark5::getInstance ('MARK_5_ENR');

$where = "`dest`='".$_GET['user']."'";
$data = '*';
$all_messages = $db_m_5->select ('`tks_message`', $data, $where, ' ORDER BY id DESC ', 'list');

if($_GET["mod"]=='nb')
{
    if (count($all_messages)>0)
    {
        echo 'blink';
    }

}
elseif($_GET["mod"]=='read')
{
    $msg='';
    foreach ($all_messages as $key => $value) {
        if($value->priority==1)
            {$priority='<img src="./includes/images/ok.png" height="24" width="24">';}
        elseif($value->priority==2)
            {$priority='<img src="./includes/images/warning.png" height="24" width="24">';}
        elseif($value->priority==3)
            {$priority='<img src="./includes/images/forbiden.png" height="24" width="24">';}
        else{$priority='';}

        $message=$priority.' Le: '.$value->submit.': '.$value->message.'<br>';
        $msg=$msg.''.$message;
    }
    echo $msg;
}
elseif($_GET["mod"]=='erase')
{
    $where = "`dest`='".$_GET['user']."'";
    $all_messages = $db_m_5->delete ('`tks_message`', $where);
}
?>

Je n'ai pas la moindre idée de la raison pour laquelle firefox ne veux pas travailler correctement
en faisant diverse manip, je sais que le fichier répond bien à firefox, mais par contre lors d'un vardump $_post ou $_get, retrive ne les renvoie comme s'il n'était pas envoyé.

SI quelqu'un avait une idée

Je vous remerci par avance
Flo

8 réponses


Salut,

Tu as testé avec jQuery pour faire tes requêtes AJAX ?

flo3376
Auteur

a cause de foundation 6 et certain prg inhabituel créer sur ce site, je ne veux pas utiliser Jquery pour faire des requetes ajax, même si cela fait que je me complique la vie sur certain point.

Ok, tant pis.

Tu peux nous faire un screen de l'onglet network de firefox avec les en-têtes ?

Et est-ce que tu as regardé comment foncitonnait la requête AJAX de jQuery ? Tu peux peut être t'inspierer des fonctions pour te créer ta propre fonction ajax

flo3376
Auteur

j'ai pris en ref un tuto de grafikart ;) pour ajax
mais ce qui m'agace, c'est que Edge et chrome n'ont pas de soucis. c'est là que je compend pas, un prb d'entête?

Les en-têtes entre FF et Chrome sont les mêmes ? Tu as pas un truc qui changerai ?

flo3376
Auteur

j'ai l'impression c'est c'st un soucis xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); soit en entré ou en sortie.
Je prie le dieux rathon que bien vouloir nous éclairer de sa lumière

As-tu modifié tes scripts ? par ce que maintenant les requêtes sont en POST
as-tu aussi modifié le php pour qu'il traite du POST ?

flo3376
Auteur

oui je suis repassé en POST dans le doute et j'ai rajouté en haut de script php ceci

header("application/x-www-form-urlencoded; charset=UTF-8");

tiens le forum convertit mes " en code html par moment