Ich habe eine einfache PHP-Datei, die meinen Json-String decodiert, mit Ajax übergeben und das Ergebnis mit einem Stempel versehen, aber ich kann die Variable $_POST
nicht beibehalten. Warum?
Ich versuche, mit fireBug zu prüfen, und ich kann sehen, dass die POST - Anforderung korrekt gesendet wird. Wenn das Skriptphp aufgerufen wird, antwortet er mit Noooooooob auf mich, es scheint, als sei eine beliebige POST -Variable gesetzt .
Alles was ich will ist mein Array zu haben =)
Von JSON.stringify
generierter JSON-String:
[
{
"id":21,
"children":[
{
"id":196
},
{
"id":195
},
{
"id":49
},
{
"id":194
}
]
},
{
"id":29,
"children":[
{
"id":184
},
{
"id":152
}
]
},
...
]
JavaScript
$('#save').click(function() {
var tmp = JSON.stringify($('.dd').nestable('serialize'));
// tmp value: [{"id":21,"children":[{"id":196},{"id":195},{"id":49},{"id":194}]},{"id":29,"children":[{"id":184},{"id":152}]},...]
$.ajax({
type: 'POST',
url: 'save_categories.php',
dataType: 'json',
data: {'categories': tmp},
success: function(msg) {
alert(msg);
}
});
});
save_categories.php
<?php
if(isset($_POST['categories'])) {
$json = $_POST['categories'];
var_dump(json_decode($json, true));
} else {
echo "Noooooooob";
}
?>
Ihr Code funktioniert, wenn Sie dataType: 'json'
entfernen und ihn gerade getestet haben.
$('#save').click(function() {
var tmp = JSON.stringify($('.dd').nestable('serialize'));
// tmp value: [{"id":21,"children":[{"id":196},{"id":195},{"id":49},{"id":194}]},{"id":29,"children":[{"id":184},{"id":152}]},...]
$.ajax({
type: 'POST',
url: 'save_categories.php',
data: {'categories': tmp},
success: function(msg) {
alert(msg);
}
});
});
dataType ist json, daher schreibt jQuery folgendes:
{"categories":"[{\"id\":21,\"children\":[{\"id\":196},{\"id\":195},{\"id\":49},{\"id\":194}]},{\"id\":29,\"children\":[{\"id\":184},{\"id\":152}]},...]"}
Dies ist kein Standard-URL-Code, daher ist $ _POST leer.
Sie können Daten für Ihre komplexe Struktur festlegen und werden von jQuery korrekt codiert:
$('#save').click(function() {
$.ajax({
type: 'POST',
url: 'save_categories.php',
dataType: 'json',
data: $('.dd').nestable('serialize'),
success: function(msg) {
alert(msg);
}
});
});
Und in PHP: $categories = json_decode(file_get_contents('php://stdin'));
Versuche dies:
$('#save').click(function() {
var tmp = JSON.stringify($('.dd').nestable('serialize'));
// tmp value: [{"id":21,"children":[{"id":196},{"id":195},{"id":49},{"id":194}]},{"id":29,"children":[{"id":184},{"id":152}]},...]
$.ajax({
type: 'POST',
url: 'save_categories.php',
dataType: 'json',
data: 'categories=' + encodeURIComponent(tmp),
success: function(msg) {
alert(msg);
}
});
});
Ich habe nur diese Zeile geändert:
data: 'categories=' + encodeURIComponent(tmp),
weil das der Weg ist, wie man dort Daten schreiben muss. Ich habe es getestet, es funktioniert ...
es ist Arbeit für mich, du kannst es versuchen. JavaScript
$('#save').click(function() {
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'save_categories.php',
dataType: 'json',
data: JSON.stringify({'categories': $('.dd').nestable('serialize')}),
success: function(msg) {
alert(msg);
}
});
});
sie müssen den folgenden Code in save_categories.php .__ schreiben. $ _POST ist mit Formulardaten vorgefüllt.
Um JSON-Daten (oder beliebige Rohdaten) zu erhalten, verwenden Sie php: // input.
$json = json_decode(file_get_contents("php://input"));
$categories = $json->categories;