再谈Jquery Ajax方法传递到action(补充)

2020-05-23 06:07:41易采站长站整理

                }; 


把contentType改成json格式,那么得到的是出错的信息。
虽然person是json对象,但是jquery中的ajax,data会自动的被转换成查询字符串格式key1=value1&key2=value2这种形式,很显然这种形式不是json格式,因此会出错。
要避免转换成查询字符串格式,只需要设置processData为fasle即可。processData默认是true。
这里需要注意的是:当指定了contentType的时候,数据将不再按照Form Data的形式提交了,而是变成Request Data的形式提交。可以从图上的Request Header中看出。需要注意的是,Form Data提交的数据可以由FormCollection获得到。Request Data方式提交的则不能通过FormCollection获得。
如果把processData设置为默认值true。


image_thumb[3]



如果把processData设置为false。



image_thumb[2]


以上两种方式,按照application/json的类型传给都会失败,因为json是基于文本的格式,上面两种方式传递的都不是json文本。因此会出错。


因此,把option改成:



var option = { 
    url: ‘/test/ReadPerson’, 
    type: ‘POST’, 
    data:JSON.stringify(person), 
    dataType: ‘html’, 
    contentType: ‘application/json’, 
    success: function (result) { alert(result); } 
}; 


则传递的就是json文本,因此根据命名匹配,就能获得值了。


clipboard[8]_thumb


对于较为简单是数据类型,有时候不指定contentType也能通过命名匹配传值。但是对于稍微复杂点的数据类型,有时指定contentType: ‘application/json’,处理起来更加方便。
如果一个controller里的action方法是接受一个List类型的参数,比如:
public ActionResult ReadPersons(List<PersonModel> model)
那么js中先构造这样的一个json对象的数组。如下



var persons = [{
                id: “001”,
                name: “zhangsan”,
                age: “20”,