Чтение javascript-объекта как JSON на POST - PullRequest
2 голосов
/ 13 сентября 2011

Я читал, что "javascript is JSON" в других сообщениях SO. У меня возникают трудности с переводом этой теории в мое приложение. Я выполняю POST с JQuery

    $.ajax({
        type: 'POST',
        url: 'Pricing/Create',
        data: items,
        success: function () { alert('successfully called pricing'); },
        dataType: 'json'
    });

Запись успешно достигает точки останова в моем методе PricingController Create. При просмотре моего Request.QueryString он пуст.

items - это массив SomeItem с length = 30. Определяется как

function SomeItem(description, finalPrice, percentDiscount) {
    this.Description = description;
    this.FinalPrice = finalPrice;
    this.PercentDiscount = percentDiscount;
}

Я не выполняю преобразование JSON, потому что "javascript is JSON". Как мне получить данные в контроллере цен?

<ч /> Почти готово. Когда запускается JSON.stringify(items), я вижу хороший набор мусора в моем оповещении () (также довольно в Firebug):

[{"Description":"some item","Data2":"$1.00","data3":"10"},//...

Но когда он прибывает на сервер ... в C # Request.Form это выглядит так:

%5b%7b%22Description%22%3a%22some+item%22%2c%22data2%22 Вутфлип это ...

Ответы [ 3 ]

5 голосов
/ 13 сентября 2011

JSON - это «JavaScript Object Notation», а не JavaScript.Вы используете JSON для представления объекта JavaScript, особенно когда вы хотите отправить его обратно на сервер.

Вам необходимо преобразовать ваш объект JavaScript в JSON перед передачей его в вызов ajax - это должно помочь:

var json = $.toJSON(items);

Прочитайте это, это может помочь: http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

3 голосов
/ 13 сентября 2011

Вы пробовали JSON.stringify()?

Вы можете изменить строку данных на:

data: JSON.stringify(items),

Если целевой браузер изначально не поддерживает JSON.stringify(), вы можете Googleбиблиотека для заполнения этой функции.

1 голос
/ 13 сентября 2011

Ну, если вы использовали метод POST, то он не будет в переменной QueryString.Если вы посмотрите, что происходит с инструментом, похожим на фидлер, передаются ли ваши данные (элементы) обратно в тело запроса?Если это так, то вы сможете получить к нему доступ.В противном случае что-то не так с вашим запросом AJAX.

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