2 votes

JSON Post and Decode array to PHP (en anglais)

J'essaie de poster un tableau dans un fichier PHP en utilisant JSON. Cela ne fonctionne pas. Le problème est que rien ne se passe. Si je décommente datatype : "json" alors j'obtiens l'alerte (mais sans données).

Voici mon code jquery

var arr = new Array();
arr.push('1','Brussels|25');
arr.push('2','Antwerp|40');
$.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: "jsondecode.php",
  data: JSON.stringify(arr),
  dataType: "json",
  success: function(data){alert(data);},
  failure: function(errMsg) {
    alert(errMsg);
  }
});

Et voici mon code PHP (jsondecode.php) ;

 <?php
 $array = json_decode($_POST["arr"]);
 foreach($array as $el){
    $el_array=explode('|',$el);
    echo"City=".$el_array[0]." And Age = ".$el_array[1]."";
 }

 ?>

Quelqu'un connaît-il un tutoriel utile à ce sujet ?

4voto

Yogesh Suthar Points 19002

Vous devez envoyer les données dans ce format pour qu'elles soient récupérées comme suit $_POST["arr"]

data: { arr : JSON.stringify(arr) },

3voto

Qu'est-ce que vous essayez de faire ? Il semble que vous essayez de mettre des paires clé-valeur dans le JavaScript-Array avec arr.push('1', 'Brussels|25'); attend un tableau contenant "Bruxelles|25" sous la clé "1" - mais attention, vous êtes en train de créer ce tableau : ["1", "Brussels|25", "2", "Antwerp|40"] .

Si vous voulez envoyer du json, envoyez des données json :

var arr= [{  
    "city" : "Brussels",  
    "age" : 25  
},{  
    "city" : "Antwerp",  
    "age" : 40  
}];  

puis votre appel ajax :

$.ajax({
   type: "POST",
   url: "jsondecode.php",
   data: {arr: JSON.stringify(arr)},
   success: function(data){
        console.log("success:",data);},
   failure: function(errMsg) {
        console.error("error:",errMsg);
   }
});

Il n'est donc pas nécessaire de faire exploser les données côté serveur.

Le script côté serveur :

<?php
$data = json_decode($_POST["arr"]);
// will echo the JSON.stringified - string:
echo $_POST["arr"];
// will echo the json_decode'd object
var_dump($data);
//traversing the whole object and accessing properties:
foreach($data as $cityObject){
    echo "City: " . $cityObject->city . ", Age: " . $cityObject->age . "<br/>";
}
?>

J'espère que cela vous aidera.

@edit : Au fait, utilisez console.log() o console.error() au lieu de l'alerte. L'alerte met les scripts en pause jusqu'à ce que vous cliquiez sur ok et vous ne pouvez pas voir les objets dans une alerte.

@2nd edit : le script est maintenant testé, j'ai supprimé le code inutile et ajouté le code côté serveur

1voto

Sankalp Mishra Points 3157

Remplacer :

$array = json_decode($_POST["arr"]);

Par :

 $array = json_decode($_POST["arr"], true);

0voto

user1371961 Points 137

Cela a fonctionné pour moi :

JS :

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "jsondecode.php",
    data: JSON.stringify({"1": "Brussels", "2": "Antwerp"}),
    success: function(data){alert(data);},
    failure: function(errMsg) {
        alert(errMsg);
    }
});

PHP :

<?php
$p = file_get_contents('php://input');
$x = json_decode($p, true);
echo $x["1"];
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X