带有序列化和数据数组的jQuery post()

我在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); 

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

而不是使用$.post使用$.ajax并设置traditional option = true

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

traditional: true选择很重要

我通过常规的.ajax()调用几个月来撞击这堵墙。

我最终发现你需要在$ .ajax()的参数列表中设置traditional: true 。 (请参阅此处的“传统”标题: http : //api.jquery.com/jQuery.ajax/ )

由于$ .post()没有params列表,我不确定你能用$ .post()做到这一点。 但是使用$ .ajax()的代码并不多。

  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 }); 

以下对我有用。 您可以使用如下所示的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."); } });