В jQuery я возвращаю HTML в результате JSON, что мне нужно избегать? - PullRequest
7 голосов
/ 17 марта 2009

В моем запросе Ajax (с использованием jQuery ) я возвращаю ответ JSON .

Так что в json.Html будет строка HTML, которую я хочу добавить в div.

На стороне сервера, мне вообще нужно экранировать HTML?

В моем действии MVC я возвращаюсь:

return Content("{html: ???????}, "application/json");

Ответы [ 6 ]

14 голосов
/ 17 марта 2009

Альтернативным решением было бы просто вернуть HTML и использовать jQuery's load():

$('#someDiv').load('servershtml.html');

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

Спецификация очень удобочитаема и коротка.

7 голосов
/ 17 марта 2009

Вам нужно добавлять косые черты в кавычки и косые черты (ala \ "и \\) при экранировании содержимого для помещения в строку JSON. Символы HTML внутри строки JSON ничего не значат, поэтому они в порядке:)

Конечно, убедитесь, что ваша строка сама по себе правильно сформирована (X) HTML, чтобы она не взорвалась при вставке в div.

6 голосов
/ 15 ноября 2010

При создании JSON с HTML вам нужно экранировать, затем ввести двойные кавычки и также символ CLRF , и он вернет HTML в порядке.

Я работал с оракулом pl / sql in, который был вызван из запроса AJAX. Если хотите, я могу опубликовать реализацию.

Вы должны проверить свой вывод на http://www.jsonlint.com/, чтобы убедиться, что он действителен.

Итак

{
    "id": "1",
    "html_value": "<a href=\"http://www.google.com\">test link returnin html code</a>"
}

отличается от

{
    "id": "1",
    "html_value": "<a href=\"http://www.google.com\">test link returnin
 html code</a>"
}

из-за символа CLRF. Вы должны заменить это на стороне сервера на &nbsp; или <br/>.

Надеюсь, это поможет, Alex

5 голосов
/ 14 августа 2012

Я опубликую свой опыт работы с PHP. Я надеюсь, что это может помочь.

Обычно для кодирования данных используется функция json_encode(), например ::1004

json_encode(array('data1' => 'String data with text',
              'data2' => '<a href="www.stackoverflow.com">The Site</a>'));

Поскольку json_encode() отлично работает только со строками UTF-8, я предлагаю кодировать каждую строку в UTF-8 с помощью функции utf8_encode(), т.е.

json_encode(array(utf8_encode('data1') => utf8_encode('String data with text'),
              utf8_encode('data2') => utf8_encode('<a href="www.stackoverflow.com">The Site</a>')));

Кроме того, если вы используете специальные символы (например, è и à в итальянских словах), я предлагаю декодировать возвращенный кодированный в кодировке json UTF8 HTML. Это особенно полезно, если вам нужно использовать его на HTML-странице (например, в результате вызова AJAX). Чтобы декодировать через Javascript , используйте:

decodeURIComponent(escape(html));

, где html - возвращенный закодированный HTML-код.

С уважением.

1 голос
/ 07 мая 2011

Если вы используете PHP, json_encode поможет вам:

$htmlSnippet = '<a href="#"></foo>';
return json_encode(array("html" => $htmlSnippet));

В jQuery вы либо объявляете тип данных 'json' (см. Ответ выше), либо декодируете jQuery.parseJSON

1 голос
/ 17 марта 2009

Если вы установите для параметра конфигурации dataType значение 'json', тогда объект, переданный событию complete, станет этим объектом javascript. По сути, jQuery выполнит работу по преобразованию содержимого ответа (при условии его правильно отформатированного JSON) в объект javascript. Пример ...

$.ajax({
    dataType: 'json',
    complete: function(myJsonObject) {
        alert(myJsonObject.someMember);
    }
}); //$.ajax({

Если вам интересно, как сгенерировать правильно отформатированный JSON из .net, я бы посоветовал вам изучить Json.NET , потому что это делает генерацию JSON очень, очень простой.

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