Json Возвращение [объект объекта] вместо массива - PullRequest
2 голосов
/ 01 октября 2011

У меня есть данные JSON, которые подаются в сенсорное приложение Sencha. Вот JSON:

http://pastie.org/2622260 - (конечно, модифицировано для примера)

Когда я возвращаю «images» и console.log, он возвращает следующее:

images: "[object Object],[object Object],[object Object],[object Object],[object Object]"

Вместо URL-адресов.

Мой кодер json выглядит следующим образом (я извлекаю данные с сайта Wordpress):

 case 'posts':
    foreach(get_posts('numberposts=50&category=') as $post) {

            $count = 0;
            $imgurl = array();
            foreach( get_group('Photo', $post->ID) as $images){
                $count++;
                $imgurl[] = array(
                    'count'=>$count,
                    'imageurl'=>get('photo_image_file', $count, 1, false, $post->ID),
                );
            }

      $json['posts'][] = array(
        'id'=>$post->ID,
        'title'=>$post->post_title,
        'body'=>apply_filters('the_excerpt', $post->post_content),
        'date'=>$post->post_date,
        'user'=>get_userdata($post->post_author)->user_firstname,            
    'images'=>$imgurl
      );

    }
}

    header('Content-type: application/json');

    echo json_encode($json);
    exit();

Что я ищу, так это возвращаю массив URL-адресов изображений, а не [объектный объект], который я сейчас получаю.

РЕДАКТИРОВАТЬ: Вот код sencha, который я использую, чтобы попытаться вытянуть imageurl из:

    console.log(this.record.data);

    console.log(this.record.data.images);
    console.log(this.record.data.images.length);

    var numberOfPages = this.record.data.images.length;
    // Create pages for the carousel
    var pages = [];
    for (var i=0; i<numberOfPages; i++) {
        pages.push(new Ext.Component({
            id: 'page'+i,
            cls: 'page',
            tpl: '<tpl for=".">{imageurl}</tpl>',
            //html:'test',
        }));
    }

    // Create the carousel
    this.carousel = new Ext.Carousel({
        id: 'carousel',
        title:'Gallery',
        iconCls:'photos2',
        defaults: {
            cls: 'card'
        },
        items: pages,
    });

Ответы [ 4 ]

3 голосов
/ 01 октября 2011

Ассоциативные массивы в PHP, закодированные как JSON, становятся объектами в JavaScript при декодировании.То, что вы видите, правильно и нормально.Получите к ним доступ, как к любому другому объекту в JavaScript.

1 голос
/ 01 октября 2011

Обновление: Извините, за неуместный пример, который я привел

Где ваш pages[i].update(this.record.data.images);?

Вы можете попробовать следующее -

var numberOfPages = this.record.data.length;
// Create pages for the carousel
var pages = [];
for (var i=0; i<numberOfPages; i++) {
    var tmp = new Ext.Component({
        id: 'page'+i,
        cls: 'page',
        tpl: '<tpl for=".">{imageurl}</tpl>'
    });
    tmp.update(this.record.data[i].images);
    pages.push(tmp);
}
0 голосов
/ 25 августа 2014

Однажды у меня была похожая проблема в бэкэнде javascript. Вот ответ для людей, использующих JS:

Перед отправкой убедитесь, что вы массивизировали массивы объектов:

JSON.stringify(array[i]);

Если, конечно, вы отправляете ТОЛЬКО JSON, который в этом случае должен работать нормально JSON:)

0 голосов
/ 02 октября 2011

Нашел ответ, передал его Рифату, потому что его ответом был трамплин.

У меня был [объект объекта] через буквальную строку символов. Я написал быстрый test.php за пределами Сенча и смог заставить работать настоящий массив. Моей первой проблемой был сам JSON - это нужно было проверить. Вы, ребята, все были правы, и спасибо за эту подсказку.

Во-вторых, как только я получил работающий документ test.php, я понял, что он должен быть внутри самого Сенчи. В голове у меня появилось ноющее чувство, что ряд персонажей как-то связан с этим. Наконец, я подошел к своей модели и обнаружил, как я вытягиваю изображения:

{name: "images", type: "string"},

Я видел строку, и момент ага ударил! Это исправило это и дало мне мои URL:

{name: "images"},

Не могу поблагодарить Игнасио и Праздника достаточно. Вы, ребята, зависли там со мной и получили ответ (в конце концов) появиться. Еще раз спасибо, и надеюсь, что это поможет всем, кто может столкнуться с подобной проблемой.

...