从JSON webservice返回HTML - 什么是“.d”?

时间:2009-04-11 10:50:31

标签: .net javascript web-services json

这是我必须在没有时间学习基础的情况下接受新技术运行的情况之一!

我有以下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);

在我注意到another example

中的“.d”之前,我一直在努力解决这个问题。

所以,它有效 - 但为什么呢?这是什么“.d”?

道歉,如果这是一个菜鸟问题,但谷歌不是我的朋友。

由于

编辑:Magnar是对的,它是.NET特有的东西。在这里查看Rick Strahl - http://www.west-wind.com/weblog/posts/164419.aspx

让我感到困惑的是它必须返回JSON,因为我的客户端脚本代码对返回非常满意,但是当我访问浏览器时,我得到了XML ...?

2 个答案:

答案 0 :(得分:14)

PrintService以JSON响应,JSON是一种基于JavaScript Object Notation的数据传输格式。所以data-parameter是一个对象,而不是HTML字符串。该对象似乎有一个名为d的成员,其中包含HTML。

如果您直接访问网址http://localhost/PrintService/PrintService.asmx/RenderPrintDialog,则会看到以下内容:

{
    d: "<html here>"
}

可能还有其他成员。

花括号表示一个对象,里面是键:由逗号分隔的值对。您可以在json.org了解有关json的更多信息。

正是为什么它被称为d是你必须要接受PrintService的作者。 ;-)也许markuphtml会是一个更有用的名称。

修改

事实证明,Duncan是PrintService的作者,并没有自己包含'd'。此外,访问URL时,他看到的是XML,而不是JSON。当在http请求中询问时,正在使用的Web服务的.NET框架会响应JSON。臭名昭着的d - 成员被该框架添加为包装器,以防止跨站点脚本。

本文解释了整个交易:A breaking change between versions of ASP.NET AJAX

答案 1 :(得分:5)

由于跨站点脚本攻击,ASP.Net将JSON数据嵌入d属性中。

可以将脚本代码作为JSON响应返回,并将数据嵌套在.d属性中使其无法通过浏览器。

见这里:JSON vulnerability

此致 ķ