#php #jquery #post
#php #jquery #Публикация
Вопрос:
Я пытаюсь передать данные в php с помощью jquery. Я получаю данные с помощью javascript.
jQuery :
$.post("export.php", JSON.stringify(result)); //result is an array of object
Когда я использую отладчик в Chrome, я вижу что-то вроде этого в данных формы:
[{«id»: «foo», «x»: 0, «y»: 1, «z»: 8, «t»:3}]:
Но когда я пытаюсь получить это с помощью php, это не работает :
echo 'Before decode ';
$array=$_POST['data'];
echo 'After decode ';
echo $array;
И это повторяет только это: перед декодированием после декодирования
Чего мне не хватает? (Я знаю, что должен декодировать данные, чтобы получить обратно массив в php, но я упростил его, чтобы увидеть, откуда возникла проблема)
Комментарии:
1. вы не передавали это как данные, используйте $.post(«export.php «, {данные: JSON.stringify(результат)});
2. большое спасибо, теперь это работает.
Ответ №1:
Если вы хотите отправить закодированную строку JSON и получить к ней доступ через $_POST['data']
, вам нужно обернуть результат в объект с ключом data
:
$.post("export.php", {data: JSON.stringify(result)});
Затем на вашем сервере вы можете расшифровать это следующим образом:
echo 'Before decode ';
$array = json_decode($_POST['data']);
echo 'After decode ';
print_r($array);
Комментарии:
1. Новичок в PHP, но я думаю, что это должно быть
$.post("export.php", {data: result});
2. Не согласно документации jQuery … api.jquery.com/jquery.post
3. @PratikJoshi Смотрите мой ответ на то, в чем настоящая проблема.
4. @koala_dev Это самая первая строка в документации:
jQuery.post( url [, data ] [, success ] [, dataType ] )
5. @koala_dev С вашей последней правкой ваш ответ теперь полностью неверен. Нигде в вашем первоначальном сообщении данные не закодированы в формате JSON, но вы расшифруете их позже…
Ответ №2:
Обычно вам даже не придется преобразовывать данные в JSON:
$.post("export.php", { data: result });
В качестве альтернативы, вам нужно было бы извлечь тело, закодированное в формате JSON, из входного потока, т. Е.:
$array = json_decode(file_get_contents('php://input'), true);
Обычно это происходит, если тип содержимого тела запроса не объявлен как application/x-www-form-urlencoded
.
Ответ №3:
попробуйте опубликовать свой json в data
переменной, тогда вы получите $_POST['data']
export.php
$.post("export.php", {data : result});
или вы можете использовать для получения ваших опубликованных данных без переменной с file_get_contents()
$data = file_get_contents('php://input');
и расшифровать его json_decode()
Комментарии:
1. да, я тоже нашел это странным, но это работает. Я сначала не заметил, но они также делают подобное в разделе примера документации
2. @Richard Есть много способов достичь того, чего вы хотите. Что вы делаете в своем вопросе, так это публикуете необработанные данные. Если вы действительно хотите обрабатывать необработанные данные, смотрите Мой ответ о том, как это сделать.
Ответ №4:
Когда вы отправляете необработанные данные JSON, PHP не знает, как их декодировать, и не будет заполнять $_POST
. Вы должны разобрать это самостоятельно. Непроверенный, но попробуйте это:
print_r(
json_decode(
file_get_contents('php://input')
)
);
Обратите внимание, что, поскольку вы публикуете JSON, я настоятельно рекомендую использовать $.ajax
вместо этого, чтобы вы могли установить contentType: 'application/json'
.