Ответ jQuery .getJSON, игнорирующий экранированные символы в ответе JSON - PullRequest
2 голосов
/ 29 октября 2011

У меня есть данные, которые включают метки в дюймах и футах (\ "и \ '), с ответом на вызов AJAX, возвращающий допустимый JSON (экранированный \" и нет "), который я использую в форме HTML.

со следующим ответом JSON: (другие элементы могут иметь несколько комбинаций цена / размер, следовательно, список; этот пример для краткости)

{"pl":{"common":"","price":[219],"size":["2\""]}}

Обратите внимание, что размер в 2 дюйма имеетJSON избежал \ ".

При использовании следующего javascript (с использованием jQuery .getJSON) возвращаемые данные не включают в себя экранированный символ:

$.getJSON(url,
    {data},
    function(json){
        var obj = json.pl.size;
        var options = '<option value="">Size</option>';
        for (var i = 0; i < obj.length; i++) {
        // possible for size to have \' and/or \" chars
            options += '<option value="' + obj[i] + '">' + obj[i] + '</option>';
        }
    // populate the select box with the options
});

Функция успеха возвращает:

json: Object
    pl: Object
        common: ""
        price: Array[1]
        size: Array[1]
            0: "2""

Обратите внимание, что у данных size[0] больше нет экранированных "

Вопрос 1. Почему экранированные данные JSON не учитываются в ответе об успешном выполнении?

И для хихиканья:

  1. Какой лучший способ избежать этих данных в HTML-форме.

1 Ответ

1 голос
/ 28 сентября 2012

В JavaScript вот как это оценивается:

  • String("2\"") возвращает "2""
  • String("2\\\"") возвращает "2\""
  • String("2\\") возвращает "2\"

JSON требует экранирования от обратной косой черты, поэтому правильный синтаксис будет "2\\\\\\\""

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