Ich verwende jQuery, um ein Json-Objekt in meiner PHP-Anwendung zu veröffentlichen.
jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });
Die Json-Saite, die aus Feuerböcken gezogen wurde, sieht so aus
{ "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
In PHP versuche ich, daraus ein assoziatives Array zu machen.
Mein PHP-Code ist bisher
<?php
$value = json_decode(stripcslashes($_POST));
echo $value['page'];
?>
Die Antwort auf den Ajax-Aufruf sollte "about_us.php" lauten, wird jedoch leer zurückgegeben.
Sie können vermeiden, JSON.stringify
und json_decode
zu verwenden:
jQuery.post("save.php", dataToSend, function(data){ alert(data); });
Und:
<?php
echo $_POST['page'];
?>
Update:
... aber wenn Sie sie wirklich nutzen wollen, dann:
jQuery.post("save.php", {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });
Und:
<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>
$_POST
wird nicht ausgefüllt, wenn der Anforderungshauptteil nicht in der standardmäßigen urlencodierten Form vorliegt.
Lesen Sie stattdessen aus dem read-only php://input
-Stream , um den Rohteil der Anforderung zu erhalten:
$value = json_decode(file_get_contents('php://input'));
Übergeben Sie das zweite Argument als "true", wenn Sie das assoziative Array verwenden möchten. Andernfalls wird das Objekt immer zurückgegeben.
$value = json_decode(stripslashes($_POST),true);
Versuchen:
echo $value->page;
da json_decode
standardmäßig ein Objekt vom Typ stdClass
zurückgibt.
Setzen Sie alternativ das zweite optionale Argument $assoc
auf true
:
$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
Es sieht so aus, als könnte jQuery ein Javascript-Objekt in urlencodierter Form kodieren und dann in $ _POST eingetragen werden. Zumindest aus ihren Beispielen . Ich würde versuchen, Ihr Objekt in post()
zu übergeben, ohne es zu beschneiden.
Wenn Sie json-Daten als assoziatives Array verwenden möchten, können Sie Folgendes versuchen:
<?php
$json = 'json_data'; // json data
$obj = jsondecode($json, true); // decode json as associative array
// now you can use different values as
echo $obj['json_string']; // will print page value as 'about_us.php'
for example:
$json = { "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
$obj = json_decode($json, true);
/* now to print contents from data */
echo $obj['data']['contents'];
// thats all
?>