Поэтому я отправляю массив объектов в строке JSON, используя javascript для PHP-скрипта, и у меня возникают реальные проблемы с расшифровкой его в php.
Мой javascript выглядит следующим образом:
$.ajax({ type: 'POST', url: "question_save.php", data: {myJson: JSON.stringify(jsonArray)}, success: function(data){ alert(data); } });
Строка, отправленная на PHP, выглядит так:
[{"content":"Question text"},{"answerContent":"Some answer text","score":"234","responseChecked":0,"responseContent":""},{"answerContent":"","score":"0","responseChecked":0,"responseContent":""}]
Если я повторяю $ _POST ['myJson'], я получаю следующее:
[{\"content\":\"Question text\"},{\"answerContent\":\"Some answer text\",\"score\":\"234\",\"responseChecked\":0,\"responseContent\":\"\"},{\"answerContent\":\"\",\"score\":\"0\",\"responseChecked\":0,\"responseContent\":\"\"}]
Тем не менее, когда я хочу декодировать JSON и пропустить его так …
$json = $_POST['myJson']; $data = json_decode($json, true); foreach ($data as &$value) { echo("Hi there"); }
… Я получаю эту ошибку:
Warning: Invalid argument supplied for foreach() in /home/thecrime/public_html/test1/question_save.php on line 15
Я действительно не понимаю, какую глупую ошибку я делаю, это как-то связано с косой чертой?
Любая помощь очень ценится!
Спасибо, -Бен
Используйте stripslashes ( $string )
– http://php.net/manual/en/function.stripslashes.php
Это должно работать
$json = $_POST['myJson']; $json_string = stripslashes($json) $data = json_decode($json_string, true); // simple debug echo "<pre>"; print_r($data);
Однако, как уже указывалось другими, лучше отключить magic_quotes_gpc
.
Откройте файл php.ini
выполните поиск по этой строке:
magic_quotes_gpc = On
Установите его в положение « Off
И перезапустите сервер.
Это связано с Magic Quotes
Лучше отключить эту раздражающую старую функцию и забыть о тех проблемах.
Вы можете отключить эти инструкции .