jQuery post() 使用序列化和数据数组

5

在MVC 3中,我无法在POST期间获取集合值。它返回null。

$.post("/Work/Post", { vm: $('#myForm').serializeArray(), 'collection': ['a', 'b', 'c'] });

//Or


var data = $('#myForm').serializeArray();
data.push({ name: 'collection', value: ['a', 'b', 'c'] });
$.post("/Work/Post", data);

//Or

var data = $('#myForm').serializeArray();
data.push({ name: 'collection[]', value: ['a', 'b', 'c'] });
$.post("/Work/Post", data);

尝试直接使用 .ajax 而不是 .post,看看是否能得到一些东西。 - mgaughan
使用Firebug或类似工具查看请求中发送的数据,并检查它是否与服务器上期望/需要的格式相匹配。 - Anthony Grist
4个回答

8

在传递数组时我遇到了类似的问题。

请使用$.ajax代替$.post,并将traditional选项设置为true...

$.ajax({
    type: "POST",
    url: "Work/",
    traditional: true,
    data: { collection: ['a','b','c'] }
});

传统选项traditional: true很重要。


4
                var model = $('#myForm').serializeArray();

                $.map(['a', 'b', 'c'], function (val, i) {
                    return model.push({ "name": "collection[" + i + "]", "value": val });
                });

                $.post("/Work/Post", model);
                //OR
                $.post("/Work/Post", model, function (data) {
                    //After Success
                });

更多的人应该了解jQuery Ajax数据模型中名称值对的用法。 - user1021364

3
我曾经花了数月时间努力使用常规的.ajax()调用,但一直未能解决问题。最终,我发现你需要在$.ajax()的参数列表中设置traditional:true(详见这里的"traditional"部分:http://api.jquery.com/jQuery.ajax/)。由于$.post()没有参数列表,所以我不确定你是否可以使用$.post()来实现这个目标,但使用$.ajax()的代码量也不是很多。请注意保留原有的html标签。

-1
以下方法适用于我。您可以使用 serializeArray() serializeJSON() 如下,并将其设置为数据元素。观察 formData 变量。
var formData = $('#inputForm').serializeJSON();
$.ajax({
    type : "POST",
    url: server_side_url,
    cache:false,
    traditional: true,
    data: formData,
    dataType: "json",
    success: function(data, textStatus, jqXHR){
        console.log("successfully processed.");
    },
    error: function(xhr,status,error){
        console.log("error occurred.");
    }
}); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接