Bonsoir,
j’ai lu ce fil de conversation en entier et j’aimerais réagir sur quelques points.
Pour commencer, une chose évidente.
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
kaolivier
le bouton :
1 2
|
<a href="javascript:;" onclick="relance_sms(\'.choix\',\'ceci est un message de test\');success();">ceci est un message de test</a> |
J’ai copié le code de ce bouton, je l’ai collé dans un nouveau fichier HTML, ouvert ce fichier dans Firefox 57, ouvert la console JavaScript avec la touche F12. Puis j’ai cliqué sur le lien et j’ai eu ce message :
SyntaxError: illegal character index.html:1:12
Les numéros de ligne et de colonne indiquent la première séquence \' dans l’attribut onclick. Je ne sais pas ce qu’il en est dans les autres navigateurs, mais sous Firefox c’est une erreur fatale, le script ne va pas plus loin. Pour supprimer cette erreur, il suffit de retirer le backslash.
Tant qu’on parle de ce <a>, je ne veux plus voir de href="javascript:", c’est une pratique du siècle dernier qui n’avait déjà pas de bonne justification à l’époque. Ce qu’il te faut, kaolivier, c’est un élément interactif, que l’utilisateur peut facilement identifier comme tel, et qui ne mène pas vers une autre page. La balise <button> est faite pour ça.
Mais aujourd’hui encore, les navigateurs ont du mal à appliquer certains styles à <button>. Pour cette raison, il est actuellement toléré de préférer l’élément <a> à la place de <button> quand on a une charte graphique à respecter. On lui donne alors l’attribut href="#". L’inconvénient de <a> est qu’il faut annuler le comportement par défaut en ajoutant return false ou en appelant preventDefault(), selon la situation.
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
kaolivier
Or si je selctionne toto et tata et que je clique sur le lien, je vois bien l'alerte s'afficher :
relance_sms.php?liste=["toto","tata"]&sms=ceci est un message de test
en réalité il s'emblerait que la fonction ne l'appelle pas, puisque derriere le fichier relance_sms ne s'execute pas.
Une erreur classique quand on débute avec ajax : tu n’as pas tenu compte du fait qu’ajax est asynchrone. Quand tu appelles xhr_object.send, tu lances la requête mais elle n’aboutit pas tout de suite. Ton code va jusqu’au alert avant que la réponse soit arrivée. headmax te donne la version corrigée dans son dernier message, avec le alert au bon endroit, dans la fonction onreadystatechange.
Pour te rendre la vie un peu plus facile, tu peux utiliser console.log à la place de alert, les messages apparaîtront dans la console de ton navigateur et n’interrompront pas l’exécution de tes scripts.
Une petite chose aussi à propos du JSON encodé en URL : utilise encodeURIComponent pour échapper les caractères spéciaux. Que se serait-il passé si tes données de formulaire avaient contenu, par exemple, le symbole & ? C’est valable aussi bien pour GET que pour POST.
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
headmax
es tu au courant que ta fonction ajax n'est pas compatible cross browser et je te conseil vivement si tu peux l'utilisation de jquery pour ne pas être embêté par cette problématique, si tu souhaite que tout le monde puisque profiter de ton site.
Je suis fortement opposé à cette idée, et je vais apporter des arguments.
La page XMLHttpRequest du MDN indique que le support de base de la techno est assuré par Firefox, Chrome et Opera depuis toujours, ainsi que par Edge, IE7 sans ActiveX, et Safari 1.2. On peut tirer de ces faits deux conclusions :
- la techno est très, très largement supportée ;
- on ne doit prendre en charge les ActiveX que si on est obligé de supporter IE6. (dans tous les sens du terme
)
Donc, pour créer un objet ajax, cette ligne de code suffit :
var xhr_object = new XMLHttpRequest();
Pour appuyer encore plus mes propos, cette page de caniuse.com chiffre le support du niveau 2 de XMLHttpRequest, les fonctionnalités avancées (qui ne sont pas utilisées ici) et on peut voir dans le coin à droite que ces fonctionnalités sont supportées à plus de 94 %.
Aujourd’hui le débat se ferait plutôt sur l’utilisation en production de Fetch, mais franchement, pour XHR, il n’y a aucune question à se poser.
Quant à suggérer jQuery pour ça, je ne suis pas d’accord. La compatibilité est un questionnement de professionnel. Quand on débute, qu’on fait des expériences et qu’on cherche à apprendre, un framework est contre-productif. Un framework ne nous apprend pas le vrai fonctionnement des choses.
![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
kaolivier
Voici mon code PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
session_start();
require ('conx.php');
require ('session.php');
header('Content-Type: application/json');
$sms = @$_GET["sms"];
$liste=json_decode(@$_GET['liste']);
foreach ($liste as $key => $value)
{
$client=$liste[$key];
$modif=mysql_query("INSERT INTO `".$suff_table."journal` (idUT, idCLIENT, date, statut, commentaire) VALUES ('$MB_idUT', '$client', '$date_con', 'Relance SMS', '$sms')");
} |
Mais si le code PHP fonctionne en mettant l'url obtenue dans l'alerte dans la barre de navigation, c'est que le PHP fonctionne, donc pourquoi l'ajax le bloque ?????
Très belle vulnérabilité aux injections SQL
Mais j’ai déjà dit beaucoup de choses dans ce post, on va garder ça pour plus tard.
Si la requête fonctionne quand tu utilises la barre de navigation, c’est un indice qu’il y a assez probablement une erreur dans le JavaScript. Ouvre ta console et dis-nous si tu vois un message d’erreur
Partager