IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Ajax fetch POST ne fonctionne que sur FormData et pas en JSON


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Electron libre since 80's
    Inscrit en
    Juillet 2016
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Electron libre since 80's
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 92
    Par défaut Ajax fetch POST ne fonctionne que sur FormData et pas en JSON
    Bonjour,

    Là, je n'arrive pas à comprendre :

    Un fetch fonctionne en méthode GET mais comme j'ai pas mal de données (enfin, pas dans mon exemple) et que mon JSON est tout prêt, je veux le faire en POST.

    Ca ne fonctionne que sur un FormData et pas sur un JSON. Dans ce dernier cas, mon $_POST en php est vide.

    Ca doit être tellement bête que je vais devoir aller me cacher au fond des bois quand j'aurai une solution mais, dans l'immédiat, ça me prend la tête.

    Problème reproduit sur winamp (php 5.6 et 7.1) et sur un serveur o2swicth.

    att.html
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>title</title>
        <script src="att.js"></script>
      </head>
      <body>
    	Test
    	<script>go()</script>
      </body>
    </html>

    att.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    async function go()
    {	const formData=new FormData();
    	formData.append('title', 'My Vegas Vacation');
    	const jsonData={cmd:"test"};
     
    	console.log("POST FORM");
    	try
    	{	const response=await fetch('att.php',{method:'POST',body:formData});
    		const result=await response.json();
    		console.log('Success:',JSON.stringify(result));
    	}
    	catch (error)
    	{	console.error('Error:',error);
    	}
     
    	console.log("POST JSON");
    	try
    	{	const response=await fetch('att.php',{headers:{'Accept': 'application/json','Content-Type': 'application/json'},method:'POST',body:JSON.stringify(jsonData)});
    		const result=await response.json();
    		console.log('Success:',JSON.stringify(result));
    	}
    	catch (error)
    	{	console.error('Error:', error);
    	}
    }
    att.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $data=$_POST;
    $data['org']=$data['title'];
    $data['title']='retour';
    header('Content-type: application/json');
    echo json_encode($data);
    ?>

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    Ca ne fonctionne que sur un FormData et pas sur un JSON. Dans ce dernier cas, mon $_POST en php est vide.
    on ne traite pas côté serveur les données type FormData et type JSON de la même manière.

    Type FormData :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $data = $_POST;
    $data['org'] = $data['title'];
    $data['title'] = 'retour';
    echo json_encode($data);
    ?>

    Type JSON :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $data = json_decode(stripslashes(file_get_contents("php://input")), true);
    $data['org'] = $data['title'];
    $data['title'] = 'retour';
    echo json_encode($data);
    ?>

    ou alors tu peux faire un mix :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if (!empty($_POST)) {
      $data = $_POST;
    }
    else {
      $data = json_decode(stripslashes(file_get_contents("php://input")), true);
    }
    $data['org'] = $data['title'];
    $data['title'] = 'retour';
    echo json_encode($data);
    ?>
    mais bon il faut savoir ce que l'on veut.

    Nota : tu ne travailles pas avec les mêmes variables dans ton exemple !?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const formData=new FormData();
    formData.append('title', 'My Vegas Vacation');
    const jsonData={cmd:"test"};

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/09/2015, 15h48
  2. Réponses: 4
    Dernier message: 01/04/2009, 16h29
  3. Help: Script d'arborescence ne fonctionnant que sur Internet Explorer
    Par cyrilk dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/10/2006, 19h28
  4. Réponses: 2
    Dernier message: 30/10/2005, 14h38
  5. Programme ne fonctionnant que sur certaines machines
    Par Marekh dans le forum DirectX
    Réponses: 14
    Dernier message: 30/08/2005, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo