Json文字列をデコードし、ajaxで渡され、結果にスタンプするシンプルなphpファイルがありますが、$_POST
変数を保持できません。なぜですか?
FireBugで調べてみると、phpスクリプトが次の場合にPOSTリクエストが正しく送信されていることがわかります呼ばれ、彼は私にNoooooooobを応答します、それはPOST変数が設定されているようです.
私が欲しいのは私の配列=)を持つことです
JSON.stringify
によって生成されたJSON文字列:
[
{
"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";
}
?>
dataType: 'json'
を削除してテストすると、コードは機能します。
$('#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はjsonなので、jQueryはこれを投稿します。
_{"categories":"[{\"id\":21,\"children\":[{\"id\":196},{\"id\":195},{\"id\":49},{\"id\":194}]},{\"id\":29,\"children\":[{\"id\":184},{\"id\":152}]},...]"}
_
これは標準のurlencodeではないため、$ _ POSTは空です。
複雑な構造にデータを設定すると、jQueryはそれを正しくエンコードします。
_$('#save').click(function() {
$.ajax({
type: 'POST',
url: 'save_categories.php',
dataType: 'json',
data: $('.dd').nestable('serialize'),
success: function(msg) {
alert(msg);
}
});
});
_
そして、php:$categories = json_decode(file_get_contents('php://stdin'));
試してみてください。 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); } }); });
save_categories.phpに以下のコードを記述する必要があります。$ _ POSTにはフォームデータが事前に入力されています。
JSONデータ(または生の入力)を取得するには、php:// inputを使用します。
$json = json_decode(file_get_contents("php://input"));
$categories = $json->categories;
これを試して:
$('#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);
}
});
});
私はこの行だけを変更しました:
data: 'categories=' + encodeURIComponent(tmp),
なぜなら、そこにデータを書き込む必要があるからです。私はそれをテストしました、その動作...