requette ajax qui ne marche pas que sur firefox

Par flo3376, il y a 9 ans


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

flo3376, il y a 9 ans

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

BaBeuloula, il y a 9 ans

Salut,

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

flo3376, il y a 9 ans

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.

BaBeuloula, il y a 9 ans

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, il y a 9 ans

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?

BaBeuloula, il y a 9 ans

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

flo3376, il y a 9 ans

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

Huggy, il y a 9 ans

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 ?