源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-01-25 15:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:再谈Jquery Ajax方法传递到action(补充)
之前写过一篇文章[url=http://www.1sucai.cn/article/50010.htm]Jquery Ajax方法传值到action[/url],本文是对该文的补充 假设 controller中的方法是如下:
[url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/clipboard[3].png][img]http://files.jb51.net/file_images/article/201405/201405112233292.png[/img] [/url] 传递的数据是一串Form数据,根据命名匹配的原则,也是可以取得数据的。 [url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/image[2].png][img]http://files.jb51.net/file_images/article/201405/201405112233293.png[/img] [/url] 将option 的代码改成如下
[url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/clipboard[4][2].png][img]http://files.jb51.net/file_images/article/201405/201405112233294.png[/img] [/url] 因此,传递到controller的是一个json字符串,MVC根据命名匹配也是可以获得到参数的值。 将将option 的代码改成如下
[url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/image[11].png][img]http://files.jb51.net/file_images/article/201405/201405112233295.png[/img] [/url] 如果把processData设置为false。 [url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/image[8].png][img]http://files.jb51.net/file_images/article/201405/201405112233296.png[/img] [/url] 以上两种方式,按照application/json的类型传给都会失败,因为json是基于文本的格式,上面两种方式传递的都不是json文本。因此会出错。 因此,把option改成:
[url=http://cnn237111.blog.51cto.com/file:///C:/Users/Administrator/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles10077468/clipboard[8][2].png][img]http://files.jb51.net/file_images/article/201405/201405112233297.png[/img] [/url] 对于较为简单是数据类型,有时候不指定contentType也能通过命名匹配传值。但是对于稍微复杂点的数据类型,有时指定contentType: 'application/json',处理起来更加方便。 如果一个controller里的action方法是接受一个List类型的参数,比如: public ActionResult ReadPersons(List<PersonModel> model) 那么js中先构造这样的一个json对象的数组。如下
[url=http://img1.51cto.com/attachment/201209/7/2359144_1346998491QOUm.png][img]http://files.jb51.net/file_images/article/201405/201405112233298.png[/img] [/url] 可以从截图中看到。但是这种格式的数据,controller中只能获得指定model用2个元素,无法获得元素中属性的值。 [url=http://img1.51cto.com/attachment/201209/7/2359144_1346998492xs0o.png][img]http://files.jb51.net/file_images/article/201405/201405112233299.png[/img] [/url] 如果把data改成JSON.stringify(jsonp),如下:   
[url=http://img1.51cto.com/attachment/201209/7/2359144_1346998492Iuv9.png][img]http://files.jb51.net/file_images/article/201405/2014051122332910.png[/img] [/url] 那么传递过去的Form Data是一串字符串,controller跟无法识别出这个东西,因此获不到值。如果仅仅设置contentType: 'application/json',而传递的又不是json格式的数据,如下: 那么传递过去的Form Data是一串字符串,controller跟无法识别出这个东西,因此获不到值。如果仅仅设置contentType: 'application/json',而传递的又不是json格式的数据,如下:
[url=http://img1.51cto.com/attachment/201209/7/2359144_1346998496L3yA.png][img]http://files.jb51.net/file_images/article/201405/2014051122332911.png[/img] [/url] [url=http://img1.51cto.com/attachment/201209/7/2359144_1346998497ijS1.png][img]http://files.jb51.net/file_images/article/201405/2014051122332912.png[/img] [/url] 如果设置contentType: 'application/json',并且设置data: JSON.stringify(persons),如下:
[url=http://img1.51cto.com/attachment/201209/7/2359144_1346998501ilyB.png][img]http://files.jb51.net/file_images/article/201405/2014051122332913.png[/img] [/url] 最后,此处再演示一个更复杂的参数类型,以便加深理解。 首先看一下Controller中的方法签名,TestClassB 和一个TestClassA的List。稍显复杂。
[url=http://img1.51cto.com/attachment/201209/7/2359144_1346998501rFx1.png][img]http://files.jb51.net/file_images/article/201405/2014051122332914.png[/img] [/url] [url=http://img1.51cto.com/attachment/201209/7/2359144_1346998502rDZn.png][img]http://files.jb51.net/file_images/article/201405/2014051122332915.png[/img] [/url] [b]总结: [/b]1.不指定contentType的话,默认都是application/x-www-form-urlencoded方式发送。此时即便发送的是json格式的数据,默认情况下,jquery的ajax也会把他转为查询字符串的形式(可以通过修改ajax参数修改),以FormData的形式发送出去。 2.不指定contentType的时候,如果controller中的方法签名比较简单,那么即便是FormData形式的数据也能由MVC的命名匹配规则获取到数据。 3.指定contentType为'application/json'时候,发送的数据必须是符合json规范的字符串。通常,使用 JSON.stringify(jsondata)有较好的可读性,可以获得一个json字符串。当然,不是必须的。使用拼接的字符串,只要是符合json规范的,也是可以发送的。 4.如果contentType为'application/json'时,发送的data不是符合json规范的字符串,则会出错。 5.通常情况下,尽量指定contentType为'application/json',并且发送json字符串作为发送数据,这样可读性更好,并且对于复杂的函数签名,也能起到很好的匹配。 本文出自 “一只博客” 博客
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部