it-swarm.com.ru

Что означает .d в JSON?

У меня есть веб-метод .NET, который я вызвал из jQuery. Метод возвращает некоторую HTML-разметку, которую я отображаю в элементе DIV.

Получив ответ, я использую 

$("#div").html(result.d);

У меня вопрос, что делает .d? Мне не нравится использовать код, который я не совсем понимаю? Могу ли я получить тот же результат, используя Eval?

45
Fermin

Вы имеете в виду службы данных ADO.NET?

Я помню, как слышал презентацию о возвращении этого JSON, и я думаю, что это просто оболочка для обеспечения полезной нагрузки объекта JSON в отличие от массива (что в случае возврата нескольких сущностей).

Почему конкретно? Я думаю, я помню, как они говорили что-то вроде «ну, это должно быть что-то».

23
Clinton

На основе этого руководства: веб-служба JSON и jQuery с Visual Studio 2008

Веб-метод возвращает продукт, сериализованный в формате JSON. Поскольку нет типа JSON, возвращаемое значение является String в формате JSON. 

На стороне клиента вызов ajax возвращает JSON. 

Результат выглядит как {d: 'returned-string-with-JSON-format'} 

Точнее что-то вроде: {d:'{"ID":123,"Name":"Surface Pro 2"}'}

Обратите внимание, что 'returned-string-with-JSON-format' является строкой, а не объектом JSON, поэтому вы не можете сделать result.d.ID.

Вместо этого вам нужно преобразовать его в объект JSON с помощью JSON.parse(result.d) или eval(result.d)

В конце вы действительно хотите сделать следующее:

result = JSON.parse(result.d)

UPDATE Также рассмотрим эту демонстрацию, где я использую JSON в строковом формате и преобразую его в объект JSON:

enter image description here

8
Jaider

ASPX код здесь:

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <script type="text/javascript">


        function GetData()
        {
            alert("I am called");
                $.ajax({
                    type: "POST",
                    url: "Contact.aspx/GetProducts",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {


                       var data = JSON.parse(result.d)
                       alert(data.Id);

                    },
                    error:function(ex)
                    {
                        alert("Test");
                    }
                });
        }
    </script>

     <asp:TextBox ID="txtName" runat="server"></asp:TextBox>

    <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="GetData();" />
</asp:Content>

Код C # здесь:

public partial class Contact : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindList();
            }
            int[] arr1 = new int[] { 1, 2 };
            ListBox1.SelectedValue = "1";
            ListBox1.SelectedValue = "4";


        }

        void BindList()
        {

            List<Product> lst = new List<Product>()
            {
                new Product{Id=1,Name="Photo"},
                new Product{Id=2,Name="Photo"},
                new Product{Id=3,Name="Photo"},
                new Product{Id=4,Name="Photo"}
            };
            ListBox1.DataSource = lst;
            ListBox1.DataTextField = "Name";
            ListBox1.DataValueField = "Id";
            ListBox1.DataBind();
        }


        [WebMethod]
        public static string GetProducts()
        {
            // instantiate a serializer
            JavaScriptSerializer TheSerializer = new JavaScriptSerializer();

            //optional: you can create your own custom converter
           // TheSerializer.RegisterConverters(new JavaScriptConverter[] { new MyCustomJson() });

            //var products = context.GetProducts().ToList();
            Product products = new Product() { Id = 1, Name = "Testing Services" };
            var TheJson = TheSerializer.Serialize(products);

            return TheJson;
        }

    }
1
Ramdas Chavan

может быть очень полезной ссылкой для тех, кто хочет по-настоящему изучить с нуля пример класса-оболочки, в котором детали одного класса никогда не могут быть раскрыты другому классу, но могут быть косвенно доступны с помощью различных методов http: // www.c-sharpcorner.com/Blogs/12038/wrapper-class-in-C-Sharp.aspx

1
clarifier

Очень ясно, что $ ("# div"). Html (result.d); в вашем коде

«result» является объектом, а d является свойством «result».

Давай объясним,

если вы создаете такой объект,

var result{"id": "number", "d": "day"};

если мы получим доступ к свойству результата в том, что с помощью jquery

$("#div").html(result.d);

поэтому мы получаем результат в HTML 

<html>day</html>
0
user4977136

Возвращает значение поля с именем 'd' в объекте 'result'.

Этот вопрос показывает пример того, как может выглядеть JSON, обратите внимание на поле d:.

0
unwind

Символ d является частью результата, возвращаемого вашим кодом .NET. Если вы посмотрите на этот код, вы увидите переменную с именем d. Если он генерируется из сериализованных классов, то он, вероятно, отправляет члена этого класса с именем d.

0
Marius

Как уже отмечали другие, он возвращает член "d" объекта "result".
Если вы хотите иметь "d" в переменной, вы можете использовать это:

var property = "d";
var value = result[property];
0
Greg