Проводка JSON с jquery ajax для PHP

У меня есть простой 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"; } ?> 

Related of "Проводка JSON с jquery ajax для PHP"

Ваш код работает, если вы удалите 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;