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

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

Как только у меня есть ответ, я использую

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

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

Ответ 1

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

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

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

Ответ 2

На основе этого урока: JSON Web Service и 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

Ответ 3

Код 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>

Код С# здесь:

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;
        }

    }

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

"результат" - это объект, а d - свойство "результата".

Объясним,

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

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

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

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

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

<html>day</html>