Похоже, что проблема сериализации была решена в jQuery 1.4.2 (см. связанный вопрос ).
Оригинальный ответ:
Я как-то разобрался с ответом, но вам, скорее всего, он не понравится =).
Глядя на пример поста в блоге Фила Хаака, пока все элементы ввода имеют одинаковое имя, они будут внесены в список. Я попытался отобразить массив строк в массив объектов следующим образом:
var items = $.map(
$(this).sortable('toArray'),
function(item, index){
return {"item": item};
}
);
$.ajax({
url: '/Home/Insert',
type: 'post',
data: { items: items }
});
и когда я сделал отправку, я получил ненулевой массив правильной длины, но каждая ячейка была нулевой. Проблема заключалась в том, что (согласно Firebug) параметры POST выглядели так:
items[0][item] item1
items[1][item] item2
что близко к тому, что я хочу, но не совсем там. Я действительно хотел представить что-то похожее на это:
items item1
items item2
потому что это, по сути, то, что делает форма в примере Фила. Я не знаю, как заставить JSON так сериализоваться, поэтому я обманул и создал строку вручную так:
$.ajax({
url: '/Home/Insert',
type: 'post',
data: 'items=items1&items=items2'
});
Это сработало. Когда я проверил значение массива items
в действии, в нем было две строки "item1" и "item2". Похоже, вы можете заставить свой код работать, сериализовав данные вручную (если можно так выразиться) и используя строку в качестве аргумента в вашем вызове ajax. Каким-то образом это выглядит как неправильный путь, поэтому я надеюсь, что кто-то исправит меня таким образом, который будет более правильным.