json.stringify возвращает пробел [] для одного объекта, а не заполненный {} - PullRequest
1 голос
/ 09 декабря 2010

Я посмотрел на этот пост: Jquery - JSON.stringify, массив пуст , а также проверил другие форумы, выполнил поиск в Google и не нашел достойного ответа на этот вопрос.

В основном, когда я использую json.stringify для моего сохраненного массива [], он правильно создает строку json для всего, кроме одного значения массива, которое будет в сохраненном [2].Просто для примера, вот как stringify публикует 1 и 2 в массиве:

"1":{"doodleID":"716","tid":"26","outline":"sites/default/files/doodlekin/female24solid.swf","skin":"sites/default/files/doodlekin/female24face.swf","hair":"sites/default/files/doodlekin/female24hair.swf","misc":"sites/default/files/doodlekin/female24lips.swf","addlayer1":"","addlayer2":"","addlayer3":"","doodlename":"Mom","headsize":"95","flip":"true","skincolor":"E8B18C","skinblush":"sites/default/files/skin_color/e8b18c.swf","haircolor":"855D33","mouth":"sites/default/files/mouth/lips_color_d6570a_1.swf","neck":"sites/default/files/neck/pearl_necklace_solid.swf","neck_optlayer":"sites/default/files/neck/pearl_necklace_color.swf","neck_optcolor":"f8e5be"},
"2":[]

Он правильно выписывает один, но когда дело доходит до 2, значения неправильно анализируются в строку json,Итак, вы знаете, как выглядит сохраненный массив со значением 1 и 2, здесь (массив больше, я просто думаю, что это должно быть все, что вам нужно, чтобы увидеть, что идет не так. Если нет, дайте мне знать. Он отлично работает с 1а не 2):

  '1' ...
    'doodleID' => "716"
    'tid' => "26"
    'outline' => "sites/default/files/doodlekin/female24solid.swf"
    'skin' => "sites/default/files/doodlekin/female24face.swf"
    'hair' => "sites/default/files/doodlekin/female24hair.swf"
    'misc' => "sites/default/files/doodlekin/female24lips.swf"
    'addlayer1' => ""
    'addlayer2' => ""
    'addlayer3' => ""
    'doodlename' => "Mom"
    'headsize' => "95"
    'flip' => "true"
    'skincolor' => "E8B18C"
    'skinblush' => "sites/default/files/skin_color/e8b18c.swf"
    'haircolor' => "855D33"
    'mouth' => "sites/default/files/mouth/lips_color_d6570a_1.swf"
    'neck' => "sites/default/files/neck/pearl_necklace_solid.swf"
    'neck_optlayer' => "sites/default/files/neck/pearl_necklace_color.swf"
    'neck_optcolor' => "f8e5be"
'2' ...
    'doodleID' => "291"
    'tid' => "27"
    'outline' => "sites/default/files/doodlekin/male66solid.swf"
    'skin' => "sites/default/files/doodlekin/male66face.swf"
    'hair' => "sites/default/files/doodlekin/male66hair.swf"
    'misc' => ""
    'addlayer1' => ""
    'addlayer2' => ""
    'addlayer3' => ""
    'doodlename' => "John"
    'headsize' => "95"
    'skincolor' => "EEBF7C"
    'skinblush' => "sites/default/files/skin_color/eebf7c.swf"
    'haircolor' => "353535"
    'eyes' => ""
    'eyes_shadow' => ""
    'eyes_optlayer' => ""
    'eyes_optcolor' => ""
    'mouth' => "sites/default/files/mouth/goatee_solid.swf"
    'mouth_optlayer' => "sites/default/files/mouth/goatee_color.swf"
    'mouth_optcolor' => "646464"

У меня вопрос, почему при сохранении [2] удаляется из сохраненного, когда я использую: postData = JSON.stringify (сохранено);

НО сохраненноеМассив все еще существует, когда он показывает 2. Любая помощь будет очень полной, и если вам нужно больше понимания, я передам ее вам.Причина, по которой я использую глобальную переменную, заключается в том, что я использую около 10 различных функций, которые должны вызывать эту переменную, и я не хочу упускать это из виду через конструктор.

ОБНОВЛЕНИЕ: Только что понялэта проблема возникает только с Firefox тоже.Я использую Firefox 4 Beta 7. Есть ли вероятность того, что json.stringify не работает правильно?Ирт работает с Chrome и IE 8.

ОБНОВЛЕНИЕ 2: Код для полного сохранения:

function userSavedDoodlekin(flag)
{   
    // For leave page check
    addToCartPage = "true";

    pID = $("#neededInfo .productID").text();
    tID = $("#neededInfo .templateID").text();
    pAttr = new Object();
    tBg = $("#neededInfo .templateBG").text();
    tCoords = $("#neededInfo .templateCoords").text();

    $("#neededInfo .productAttr").each(function(){
        pAttr[$(this).attr('alt')] = $(this).text();
    });

    store_doodlekin("product", pID, "productID");
    store_doodlekin("product", pAttr, "productAttr");
    store_doodlekin("product", tID, "templateID");
    store_doodlekin("product", tBg, "templateBG");
    store_doodlekin("product", tCoords, "templateCoords");

    // Data for post "json" serialized  
    postData = JSON.stringify( saved );
    flag = '';

    // Check for flag
    if(flag == "true")
    {
        flag = '?saved=true'; 
    }

    // Test before launch
    // alert(postData);
    // alert(dump(saved));

    // Save the doodlekin and start another loop for the next one to save if another in line.
    // Data Sent Back: object.status = (1 or 0), object.data = (error message)

    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: "data="+postData,
        url: "/designer/save",
        success: function(obj){
            if(obj.status == 1){
                // alert(obj.data);
                window.location = "/cart";
            }
            else if(obj.status == 0){
                alert(obj.data);
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert("textStatus: "+textStatus);
            alert("errorThrown: "+errorThrown);
        }
    });

}

1 Ответ

0 голосов
/ 09 декабря 2010

Вы используете старую версию Prototype?У меня была похожая проблема, когда Prototype (или другая библиотека) добавляет несовместимые методы .toJSON, которые прерывают stringify.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...