Возврат HTML из веб-сервиса JSON - что такое ".d"? - PullRequest
8 голосов
/ 11 апреля 2009

Это одна из тех ситуаций, когда мне приходилось подбирать и запускать новые технологии, не успев изучить основы!

У меня есть следующая функция js, которая вызывает PrintService, которая возвращает мне HTML-код для вставки в div:

        function showPrintDialog() {

        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: "{}",
            dataType: "json",
            url: "http://localhost/PrintService/PrintService.asmx/RenderPrintDialog",

            success: function(data) {
                $("#printdialoginner").html(data.d);

Я боролся с этим ДЛЯ ВОЗРАСТА, прежде чем заметил ".d" в другой пример

Итак, это работает - но почему? Что это за ".d"?

Извиняюсь, если это нубский вопрос, но Google здесь не мой друг.

Спасибо

Редактировать: Магнар прав, это особенность .NET. Зацените Рика Штраля здесь - http://www.west -wind.com / weblog / posts / 164419.aspx

Что меня смущает, так это то, что он ДОЛЖЕН возвращать JSON, так как код моего клиентского скрипта весьма рад возвращению, но когда я получаю доступ к браузеру, я получаю XML ...?

Ответы [ 2 ]

14 голосов
/ 11 апреля 2009

PrintService отвечает JSON, форматом передачи данных, основанным на нотации объектов JavaScript. Таким образом, параметр данных является объектом, а не строкой HTML. Этот объект, кажется, имеет член с именем d, содержащий HTML.

Если вы посещаете URL-адрес напрямую http://localhost/PrintService/PrintService.asmx/RenderPrintDialog, вы должны увидеть следующее:

{
    d: "<html here>"
}

возможно, с другими членами.

В фигурных скобках обозначен объект, а внутри находятся пары ключ: значение, разделенные запятыми. Вы можете прочитать больше о json на json.org .

Именно поэтому он называется d, и вам придется обратиться к автору PrintService. ;-) Может быть, markup или html будет более полезным именем.

Редактировать

Оказывается, что Дункан является автором PrintService и сам не включил в себя 'd'. Кроме того, при посещении URL он видит XML, а не JSON. Платформа .NET для используемых веб-служб отвечает на запрос JSON в запросе http. Пресловутый d -модер добавлен этой оболочкой в ​​качестве оболочки для предотвращения межсайтового скриптинга.

Эта статья объясняет всю сделку: Сильное изменение между версиями ASP.NET AJAX

5 голосов
/ 11 апреля 2009

ASP.Net вкладывает данные JSON в свойство d из-за атак на межсайтовый скриптинг.

Можно возвращать код сценария в качестве ответа JSON, а вложение данных в свойство .d делает его недоступным для браузера.

См. Здесь: Уязвимость JSON

С уважением K

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