jquery $.post и php $_POST

#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' .