?

Log in

No account? Create an account
 
 
29 Май 2009 @ 10:44
json  
Разбираюсь с передачей данных из Javascript в PHP и никак не получается.

Этот код передает массив arr на обработку файлу dataparser.php:

            $.ajax({
                    url:'dataparser.php'
                    , type:'POST'
                    , data:'jsonData=' + $.toJSON(arr)
                    , success: function(res) {
                           alert(res);
                    }
            });


В файле dataparser.php данные обрабатываются следующим образом:

            $data = ($_POST['jsonData']);
            $decoded= json_decode($data,true);
            foreach ($decoded as $key=>$value) {
                  $message.= 'Параметр: '.$key.'; Значение: '.$value.'\n';
            }
            echo $message;

Вроде бы все просто, а уже четвертый день не могу побороть. Команда json_decode не может преобразовать данные и на выходе получается NULL. Тип $decoded тоже NULL.

При выводе строки JSON данных

            echo $data;

выдает такую картинку

Закрадывается подозрение, что слеши лишние, т. к. созданная вручную JSON строка ["item1","item2","item3"] успешно декодируется.

 
 
 
Бот Всея Русиdasbot on Май, 29, 2009 08:19 (UTC)
дык может magic_quotes_gpc включен на сервере?
Джуффин Халлиdzhuffin_halley on Май, 29, 2009 08:35 (UTC)
Ураааааааааааааа!!! Заработало!

Спасибо!
Человек-без-прошлогоsontar on Май, 29, 2009 08:27 (UTC)
а может json_decode не нужен вовсе, а?
Джуффин Халлиdzhuffin_halley on Май, 29, 2009 08:36 (UTC)
Не хочется самому функцию разбора строки делать.
Человек-без-прошлогоsontar on Май, 29, 2009 08:40 (UTC)
а что за библиотека?
разбор строки не нужен - приходит обычный пост, по крайней мере в mootools и в библиотеке Котерова
Джуффин Халлиdzhuffin_halley on Май, 29, 2009 08:49 (UTC)
На "обычном посте" я тренируюсь, а передавать нужно данные посложнее - несколько массивов и кучу переменных.
А mootools это аналог jQuery?
Человек-без-прошлогоsontar on Май, 29, 2009 08:55 (UTC)
если массивы не двухуровневые, то опять же простой пост подойдёт.
да. mootools.net кажется

Вот вставьте этот код в начале каждого скрипта или в начале инициализационного скрипта

function strips(&$el) {
if (is_array($el))
foreach($el as $k=>$v)
strips($el[$k]);
else $el = stripslashes($el);
}

if (get_magic_quotes_gpc()) {
strips($_GET);
strips($_POST);
strips($_COOKIE);
strips($_REQUEST);
}
Евгений Ивановeugene_ivanov on Май, 30, 2009 09:03 (UTC)
Re: Reply to your post...
нужен. я тоже использую подобную передачу данных с клиента.
Человек-без-прошлогоsontar on Май, 30, 2009 09:06 (UTC)
Re: Reply to your post...
многоуровневые массивы передаёте?
Евгений Ивановeugene_ivanov on Май, 30, 2009 09:09 (UTC)
Re[2]: Reply to your post...
массив из более чем одного поля
Человек-без-прошлогоsontar on Май, 30, 2009 09:10 (UTC)
Re: Re[2]: Reply to your post...
то есть

{
'key1':'value1',
'key2':'value2',
...
}

так?
Евгений Ивановeugene_ivanov on Май, 30, 2009 09:12 (UTC)
Re[4]: Reply to your post...
[{field1:val, field2:val}, {field1:val, field2:val}, ...]
Евгений Ивановeugene_ivanov on Май, 30, 2009 09:01 (UTC)
stripslashes
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 09:36 (UTC)
Можно и так, но я сделал по другому, отключил magic_quotes_gpc в файле .htaccess.

А у кого есть работающий вариант кодирования кириллицы в UTF8 на стороне Javascript перед передачей данных в PHP?
Я попробовал как здесь http://snippets.dzone.com/posts/show/5294 и здесь http://www.webtoolkit.info/javascript-utf8.html, но оно превращает кракозябры в еще более страшные козябры.

Евгений Ивановeugene_ivanov on Май, 30, 2009 09:46 (UTC)
Re: Reply to your comment...
нужно использовать кодировку UTF-8 на странице.
(Удалённый комментарий)
Евгений Ивановeugene_ivanov on Май, 30, 2009 16:31 (UTC)
Re[2]: Reply to your comment...
что используете в качестве ajax -бибоотеки?
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 16:36 (UTC)
Re: Re[2]: Reply to your comment...
Я работаю в Денвере, а что у него там с Аяксом по умолчанию - не знаю.
Евгений Ивановeugene_ivanov on Май, 30, 2009 16:38 (UTC)
Re[4]: Reply to your comment...
на клиенте что используете? jquery?
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 16:40 (UTC)
Re: Re[4]: Reply to your comment...
да
Евгений Ивановeugene_ivanov on Май, 30, 2009 16:43 (UTC)
Re[6]: Reply to your comment...
если кодировка выставлена, а используете jquery, то проблема в сервере.

проверьте как минимум locale
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 16:50 (UTC)
Re: Re[6]: Reply to your comment...
В httpd.conf установил AddDefaultCharset utf-8. Теперь кириллица Аяксом передается правильно, а русские буквы в html-страничке превратились в вопросики. Их, конечно, можно переписать в кодировке utf-8, но правильно ли это будет?
Евгений Ивановeugene_ivanov on Май, 30, 2009 16:51 (UTC)
Re[8]: Reply to your comment...
все тексты нужно отдавать в кодировке uft-8, конечно.
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 16:56 (UTC)
Re: Re[8]: Reply to your comment...
Благодарю за подсказки и наводящие вопросы. Проблема решена.
Джуффин Халлиdzhuffin_halley on Май, 30, 2009 16:33 (UTC)
Re: Reply to your comment...
Добавил
meta http-equiv="Content-Type" content="text/html; charset=utf-8"
не помогло.

Почему-то эта тема очень часто поднимается в сети и при этом понятного решения я пока не встретил.

Евгений Ивановeugene_ivanov on Май, 30, 2009 16:34 (UTC)
Re[2]: Reply to your comment...
кодировка у js по умолчанию utf-8. ничего кодировать не нужно.

вероятно. у вас сервер не настроен как нужно