POST массив объектов json для IHttpHandler - PullRequest
0 голосов
/ 21 июня 2011

Я создаю массив объектов следующим образом:

var postData = [];

$.each(selectedFields, function (index, value) {
    var testTitle = 'testing ' + index;
    postData.push({title: testTitle, title2 : testTitle});        
}

Затем я публикую это так (обратите внимание, что я попробовал несколько разных подходов):

$.post('SaveTitlesHandler.ashx', { form : postData }, function (data) {
    console.log(data);
});

Затем я пытаюсь получить данные в обработчике ...

public class SaveTitlesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string json = context.Request.Form.ToString();
    }

}

Кажется, я не могу получить правильный JSON из запроса. У кого-нибудь есть идеи?

веселит.

TWD

1 Ответ

11 голосов
/ 21 июня 2011

Вы не публикуете JSON.Вы используете application/x-www-form-urlencoded.Таким образом, внутри обработчика вы можете получить доступ к отдельным значениям:

public void ProcessRequest(HttpContext context)
{
    var title1 = context.Request["form[0][title]"];
    var title2 = context.Request["form[0][title2]"];

    var title3 = context.Request["form[1][title]"];
    var title4 = context.Request["form[1][title2]"];

    ...
}

Если вы хотите POST real JSON, вам нужно это:

$.ajax({
    url: 'SaveTitlesHandler.ashx',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(postData),
    success: function(result) {
        console.log(result);
    }
});

, а затем внутри обработчика читать из потока ввода запроса:

public void ProcessRequest(HttpContext context)
{
    using (var reader = new StreamReader(context.Request.InputStream))
    {
        string json = reader.ReadToEnd();
    }
}

Метод JSON.stringify преобразует объект javascript в строку JSON и является встроенным в современные браузеры встроенным методом.Вам также может понадобиться включить json2.js , если вы хотите поддерживать старые браузеры.

...