En JSON et json_decode en PHP et JavaScript
Je suis en train de passer un objet JavaScript à un script PHP par jquery.ajax()
, en gros:
var bigArray = new Object();
//Dode
//Start loop
bigArray[x] = {name: exname, id: exID, order:e, set: setBox, inc: incBox, example: exampleBox, day: i};
De sorte qu'il est à peu près un tableau de ces objets.
var anotherTest = $.toJSON(bigArray);
var ajxFile = "routineajax.php";
$.ajax({
type: 'POST',
processData: false,
url: ajxFile,
data: anotherTest,
success: function(data) {
$('#result').html(data);
alert('Load was performed.');
}
});
});
Le PHP script côté
print_r($_POST);
$params = json_decode($_POST);
print_r($params)
De l'appel Ajax est en train de vivre, et je peux voir dans Firebug, mais print_r($_POST)
retourne un tableau vide. Alors que si je le change pour $_GET
dans les deux $.ajax
fonction et le script PHP, il fonctionne. Mon principal problème est que je reçois ce message d'erreur:
Avertissement: la fonction json_decode() s'attend à ce paramètre 1 pour être string, array donné dans
Comment puis-je résoudre ce problème?
Après l'ajout de ce fragment de code au fichier PHP
$data = file_get_contents('php://input');
var_dump($data);
var_dump(json_decode($data));
Je suis de cette sortie
string'{"0"{"name":"Decline`Abs","id":"54","order":0,"set":"","inc":"","example":"","day":1}}' (length=87)`
object(stdClass)[2]
public '0' =>
object(stdClass)[4]
public 'name' => string 'Decline Abs' (length=11)
public 'id' => string '54' (length=2)
public 'order' => int 0
public 'set' => string '' (length=0)
public 'inc' => string '' (length=0)
public 'example' => string '' (length=0)
public 'day' => int 1
Donc au moins ça va, je ne suis pas sûr de savoir comment y accéder, un pas dans la bonne direction!
OriginalL'auteur mike | 2010-03-03
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème c'est que normalement la POSTE de l'envoi de données codées comme
key=value&key2=value2
, et vous l'envoyez en JSON. Essayez d'accéder à l'raw publier des données comme suit:et voir si cela fonctionne. Si non, merci de poster votre question de quoi il en retourne, si quoi que ce soit.
Basé sur le commentaire ci-dessous et des ajouts à l'OP.
Ne le
var_dump
de$data
copier-coller correctement? La raison pour laquelle je demande, c'est que cela:string'{"0"{"name"
ne regarde pas le droit de me. Qui n'est pas valide au format JSON ou codé correctement POST-chaîne. Il se peut que certains caractères eu codé lorsque vous avez copié et collé.De toute façon, vous êtes maintenant à obtenir le résultat que vous avez besoin. Le
stdClass
est juste un conteneur vide qu'il met les données dans laquelle vous pouvez accéder à l'aide de l'objet normal de la syntaxe. Dans ce cas, vous auriez à faire$data->{0}->name
je pense, à cause de qui0
. Si vous ne$data = json_decode($data, true)
il sera un tableau associatif, et vous pouvez accéder au POSTE de ed de données comme$data[0]['name']
.Si vous voulez continuer à explorer ce, il pourrait être utile de montrer les résultats de faire
window.console.dir(data)
droit avant de faire la requête ajax, et assurez-vous que lorsque vousvar_dump(data)
, vous affichez le code source de la page à copier et coller.window.console.dir(data)
montreradata
's propriétés dans la fenêtre de Firebug (vous êtes à l'aide de Firebug, non?). Il travaille également dans google Chrome, débogueur, et peut-être d'autres. Comme je l'ai dit, on dirait que vous êtes probablement à obtenir ce que vous devez déjà, afin de les étudier n'est pas nécessaire.Voir mes ajouts ci-dessus.
DONC, la question à propos de stdclass, dans le cas où vous n'êtes pas familier avec elle: stackoverflow.com/questions/931407
OriginalL'auteur davidtbernal
Tour
processData
de vrai. Je ne crois pas que votre JSON est passé par correctement. Notez également qu'il ne viendra pas à travers comme un json, mais plutôt les paires clé-valeur de votre JSON sera le contenu de$_POST
lorsque vous obtenez.Aussi, ce sont les valeurs de votre bigArray facilement modulable à la chaîne? Si vous êtes de passage dans les éléments DOM, ou quelque chose, vous allez avoir des problèmes.
Essayez de ne pas convertir bigArray à un JSON à tous. jQuery.ajax() attend un objet pour le paramètre de données de toute façon: api.jquery.com/jQuery.ajax
L'envoi de bigArray POST me donne cette Array ( [0] => [object object] [1] => [object object] ) semble comme il na pas passer de l'objet à travers.
OriginalL'auteur Brent
N'est-il pas assez clair?
json_decode()
attend un paramètre de chaîne, pas de tableau. Mais$_POST
et$_GET
sont toujours ensembles. Vous pouvez passer d'un membre de ce tableau àjson_decode()
.Pour voir un tableau du contenu, de l'utilisation de cet extrait:
Aucune idée pourquoi $_POST n'apparaît pas dans le print_r?
OriginalL'auteur Your Common Sense