У меня есть простой php-файл, который расшифровывает мою строку json, передается с ajax и штамп результат, но я не могу сохранить переменную $_POST
, почему ???
Я пытаюсь проверить с помощью FireBug, и я вижу, что запрос POST отправляется правильно, когда вызывается php- скрипт, он отвечает Noooooooob мне, кажется, какая-либо переменная POST установлена.
Все, что я хочу, это иметь свой массив =)
Строка JSON, созданная JSON.stringify
:
[ { "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}]},...]"}
Это не стандартное urlencoded, поэтому $ _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'));
Попробуй это:
$('#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),
потому что так, как вы должны писать данные там. Я тестировал его, его работа …
это работа для меня, вы можете попробовать это. 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: //.
$json = json_decode(file_get_contents("php://input")); $categories = $json->categories;