wake-up-neo.com

Lesen Sie das assoziative Array von json in $ _POST

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.

18
Daniel

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;
?>
16

$_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'));
86
Evert

Ü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);
3
Shakti Singh

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'];
1
karim79

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.

1
Paul DelRe

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 
?>
0
Mukesh