Передача сложных данных JSON jQuery в Action - PullRequest
3 голосов
/ 01 декабря 2010

У меня есть 2 класса, которые используются для зеркального отображения данных из вызова ajax.Один ( Customer ) содержит свойство name, а другой - массив Products .

Public Class Customer
    Private _Name as String
    Private _Products as Product()

    Public Property Name() As String
        Get
            Return _Name 
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Public Property Products() As Product()
        Get
            Return _Products
        End Get
        Set(ByVal value As Product())
            _Products= value
        End Set
    End Property

и вызов ajax:

$.ajax({
        url: '../../Customer/SaveCustomerData',
        type: "POST",
        dataType: "json",
        data: { "Name": this.Name,
                "Products": [{ "ProductCode": "product 1", "ProductName": "product 1" },
                             { "ProductCode": "product 2", "ProductName": "product 2"}]
        },
        success: function(data) {
            alert("Customer has been saved!");
        }
    });

Отражено значение для Customer.Name, но свойства Продуктов остаются ничем, при этом их длина равна 2.

Я что-то упустил здесь действительно важное?

1 Ответ

4 голосов
/ 01 декабря 2010

Прямо сейчас вы не передаете JSON, вы передаете данные такими, какие они есть (сериализовано с $.param()) ... что выглядит примерно так:

Name=something&Products%5B0%5D%5BProductCode%5D=product+1&Products%5B0%5D%5BProductName%5D=product+1&Products%5B1%5D%5BProductCode%5D=product+2&Products%5B1%5D%5BProductName%5D=product+2

Чтобы передать JSON, вам нужно его преобразовать в строку, например:

data: JSON.stringify({ "Name": this.Name,
        "Products": [{ "ProductCode": "product 1", "ProductName": "product 1" },
                     { "ProductCode": "product 2", "ProductName": "product 2"}]
       }),

Что выглядит так:

{"Name":"something","Products":[{"ProductCode":"product 1","ProductName":"product 1"},{"ProductCode":"product 2","ProductName":"product 2"}]}

Теперь это то, что ваша модель может превратить в объект. Для более старых браузеров (JSON, включает json2.js, который будет эмулировать поведение.

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