$ .ajax POST / non post разница в поведении? - PullRequest
0 голосов
/ 22 августа 2011

Я пытаюсь отправить некоторые данные через JSON в действие контроллера MVC:

По какой-то причине это работает:

var items = [];
$("input:checked").each(function () { items.push($(this).val()); });

//This works
$.ajax({
    type: "POST",
    url: url,
    data: { listofIDs: items, personID: personID},
    dataType: "json",
    traditional: true,
    success: function() {
        //Rebind grid
    }
});

//This listofIDs is ALWAYS null !? (longhand for `$.getJSON` ?)
$.ajax({
    url: url,
    dataType: 'json',
    data: { listofIDs: items, personID: personID },
    success: function () {
        //Rebind grid
    }
});

Так почему же это работает сверху, а снизу всегда ноль? Тот же код используется для сборки items!?

редактировать: метод контроллера

public ActionResult AddJson(List<int> listofIDs, int personID)
        {
            if (listofIDs==null || listofIDs.Count < 1)
                return Json(false, JsonRequestBehavior.AllowGet);

...
//Add something to database
//Return true if suceeed, false if not
}

edit: , поэтому я решил решить эту проблему, просто превратив массив в строку и отправив его таким образом. Таким образом я смог отправить больше, чем просто переменную массива.

var items = $(':input:checked').map(function () { return $(this).val();}).toArray();
            var stringArray = String(items);

$.ajax({
                url: url,
                dataType: 'json',
                data: { listOfIDs: stringArray, personID: personID },
                success: function () {
//rebind grid
                }
            });

Примечание: не нужно указывать POST тип.

Ответы [ 3 ]

1 голос
/ 22 августа 2011

Без type: "POST" по умолчанию GET ( в соответствии с документами ), чего, вероятно, код вашего серверного кода не ожидает.

Кроме того, вы можете получить список значений с помощью ...

var items = $(':input:checked').map(function() {
    return $(this).val();
}).toArray();

jsFiddle .

Не уверен, что лучше . Просто у меня была идея:)

1 голос
/ 22 августа 2011

Вы не указываете тип запроса, поэтому по умолчанию он GET.

From jQuery Docs :

Типзапрос на выполнение («POST» или «GET»), по умолчанию «GET».

Возможно, вы имели в виду указать POST.Если вы отправите его с помощью GET, массив будет добавлен в QUERY_STRING как ?listofIDs=... и не будет доступен так же, как вы обычно получаете доступ к данным POST.

1 голос
/ 22 августа 2011

Проблема, вероятно, на стороне сервера.В первом случае вы используете HTTP POST в другом HTTP GET.Это означает, что вам, вероятно, придется обращаться к данным по-другому.Возможно, посмотрите на Получить отдельные параметры запроса из Uri для случая HTTP GET.

...