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


Автор: Apelsin 28.8.2011, 20:10
Ребят, подскажите пожалуйста.
От createGame.php приходит JSON вот такого вида:
[{"field":[[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]]},{"user":"Vasya"},{"id_game":99}]

Код

$.ajax
        ({
            type: "POST",
            data: "username=" + username + "&password=" + password,
            dataType: "json",
            url: "./ajax/createGame.php",
            success: function(msg)
            {    
                alert(msg); // выводит [object Object],[object Object],[object Object]
                                status = msg;
                                alert(status); // выводит  [object Object],[object Object],[object Object]
                                // НО:
                                alert(msg[1]['user']); // выводит Vasya 
                                // а
                                alert(status[1]['user']); // выводит undefined
            }
        });


Т.е. вопрос такой: как копировать полностью по значению json массив?

Автор: Apelsin 28.8.2011, 21:31
Разобрался. Чтобы копировать объект в js надо определить:
Код

Object.prototype.clone = function(obj) {
    if (obj === undefined) 
    obj = this;    
    if (typeof(obj) != "object") return obj;
    var newObject = new obj.constructor();
    for (objectItem in obj) newObject[objectItem] = obj.clone(obj[objectItem]);
    return newObject;
}

а затем применить вот так:
Код

new_obj = obj.clone();


Если кто-то поможет определить объект с вот такой структурой: 
Код

[{"field":[[0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0]]},{"user":"Vasya"},{"id_game":99}]

Буду очень-приочень благодарен... Ну не выходит у меня :(.

Автор: нуп 29.8.2011, 11:07
Проверил ваш скрипт, у меня не выводит undefined  smile 

Автор: Amphiluke 29.8.2011, 19:02
Цитата(Apelsin @  29.8.2011,  01:31 Найти цитируемый пост)
Разобрался. Чтобы копировать объект в js надо определить:

Очень плохая идея — расширение прототипа Object. Этим самым вы вообще всем объектам документа дописали перечислимое свойство clone. Теперь у вас даже «пустой» объект вида obj={} будет показывать наличие свойства clone при прогоне через цикл for/in. Даже элементы документа типа body тоже теперь будут иметь метод clone, что может привести к непредсказуемым результатам.  smile 
Уж лучше бы вместо расширения прототипа встроенного типа написали обычную функцию или метод пользовательского объекта.

Автор: ksnk 29.8.2011, 19:58
Apelsin, какая задача вообще ставится? Я не смог вообразить смысл подобного действия

если поставить тип string, а не json - то полученную строку можно простым образом копировать, а объекты из нее получать eval'ом... Столько объектов, сколько нужно...

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