2009-06-07 2 views
2

Моя форма в html DOM - это флажок, чтобы щелкнуть (их может быть несколько). Проблема возникает в строке описания, когда я использую апостроф, поскольку мой объект списка одинарной кавычки делится. Это один из флажков в форме:Как связать JSON с массивом JavaScript

<input type="checkbox" id="cbx" name="cbx" value="{'getPic': 'url', 'picsrc': 'http://lh3.ggpht.com/_ZB3cttqooN0/SVmJPfusGWI/AAAAAAAADvA/GuIRgh6eMOI/Grand%20Canyon%201213_121508214.JPG', 'pos': None, 'description': 'Here's what it REALLY looks like at 5:30am! Bring your headlight!'}"> 

Javascript, который считывает значения проверяемых флажков и толкает их в массив (список):

var pylist = []; 
    for (i=0; i<document.picList.cbx.length; i++) { 

      if (document.picList.cbx[i].checked) { 
       pylist.push(document.picList.cbx[i].value); 
      } 
    } 

var getstr = JSON.stringify(pylist); 

Проблема всегда что getstr в этот момент отрубил все, что было после одиночной цитаты в свойстве описания. Я пробовал разные способы избежать этого, чтобы немного помочь.

+0

Для справки это недопустимо JSON. Строки должны быть двойными, и любой должным образом совместимый JSON-сериализатор сделает это. – cHao

ответ

1

Проблема в том, что значение флажка уже является строкой JSON. Одним из решений было бы назвать JSON.parse() на значение:

var pylist = []; 
    for (i=0; i<document.picList.cbx.length; i++) { 

      if (document.picList.cbx[i].checked) { 
       pylist.push(JSON.parse(document.picList.cbx[i].value)); 
      } 
    } 

var getstr = JSON.stringify(pylist); 
0

Я столкнулся с той же проблемой - мы будем придерживаться JSON в скрытом поле, поэтому мы не должны обращаться к серверу на каждый стр. Мы заменяем апострофы «кодом» перед помещением в html - мы добавили функцию javascript, которая заменяет код апострофом.

Действительно хаки, но он работает очень хорошо. Конечно, у нас есть одно место в коде, который получает json с сервера и в одном месте, где javascript должен разбирать его - если вы обнаружите, что повторяете методы во всем своем коде, ваш пробег будет отличаться.

Смежные вопросы