Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > В чем проблема - json_decode возвращает NULL


Автор: Poveritov 2.3.2015, 17:44
Вопрос не простой, по крайней мере в объяснении. Но попытаюсь достаточно подробно объяснить в чем проблема.

Разрабатываю i-frame приложение В контакте.
На клиентской части получаю список аудиозаписей пользователя и передаю json строку на сторону сервера методом ajax (jquery)

Код

VK.api('audio.get',{user_id:flashVars["viewer_id"]},function(data){
    $.ajax({
        dataType:"text",
        //contentType:"application/json;charset=UTF-8",
        url:'/iframe/json',
        data:({"param":JSON.stringify(data)}),
        type:'POST',
            success:function(msg){
                console.log(msg);
            }        
    });
});

переменная data возвращает все записи в правильно формате.
json строка формируется верно, проверял на jsonlint.com/

Проблема начинает возникать при получении данных POST на стороне сервера.

Провожу тестирование на собственной страничке.
Передаю информацию  о 3 аудиозаписях, в json-массиве 3 параметра соответственно.

Код на стороне сервера
Код

var_dump(json_decode($_POST['uA'],true));

возвращает массив.

Начинаю добавлять аудиозаписи и провожу повторные испытания.
Внимание! Вне зависимости от количества аудиозаписей, после добавление определенной аудиозаписи начинается сбой - json_decode возвращает NULL.
Я удаляю из списка эту аудиозаписей и снова  json_decode работает нормально. Тогда я добавляю другие аудиозаписи - и снова все в порядке. 

в json передается следующие значения 
Код
 (в качестве примера передаю инфу об  1 аудиозаписи)

response: {

items: [{
id: 319568004,
artist: 'Г.Лепс & Ани Лорак',
title: 'Зеркала',
duration: 223,
url: 'https://psv4.vk.m...gT6QxhD5lTttqj-J4',
lyrics_id: 202442158,
genre_id: 9
}]
}


Пытался обращать внимание на название исполнителя artist и заголовок title. НО не было закономерности, при которой json_decode начинало возвращать NULL. Не важно кириллица или латиница, длина строки и др.

Тем не менее, хотелось бы решить данную проблему, могли бы подсказать, в чем тут дело?

Добавлено через 10 минут и 39 секунд
причем, если передавать значения по очереди 

Код

VK.api('audio.get',{user_id:flashVars["viewer_id"]},function(data){
    $.ajax({
        dataType:"text",
        //contentType:"application/json;charset=UTF-8",
        url:'/iframe/json',
        data:({"param":JSON.stringify(data.response[1])}),
        type:'POST',
            success:function(msg){
                console.log(msg);
            }        
    });
});


даже если 1 - будет та аудиозапись, с которой json_decode  = NULL , то в этом случае json_decode вернет значение $_POST

Добавлено через 14 минут и 7 секунд
Хотя не во всех случаях, бывает, что json_decode все равно возвращает NULL

Автор: Poveritov 2.3.2015, 18:02
Собственно, если передавать отдельно по полям, то проблема начинает возникать при передаче параметра url:

Может стоит закодировать каким-то образом строку, чтобы можно было передавать url? (я так понимаю в каких-то аудиозаписях url не совсем корректный для передачи POST)

Автор: Aliance 4.3.2015, 11:04
http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp?

Автор: Poveritov 4.3.2015, 11:09
encodeURIComponent не помогал, так как проблема оказалась в глюках браузера Mozilla Firefox. Проверил в Opera - все работает, переустановил мозилу и также все стало работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)