您的位置:首页 > 移动开发

$.ajax Post 数据指定类型为application/json 的时候,后台无法直接request到数据

2013-01-16 09:55 801 查看
在$.ajax代码的时候,两端差不多的代码,一段可以提交,另一段在后台怎么样也无法request到ajax post的数据:

$.ajax({
type: "POST",
url: window.prefixURL + '/CalendarHandler/InsertCalendarEventData2',
contentType: 'application/json;charset=utf-8',
data: { "data": myjson.stringify(data) },
dataType: 'json',
success: function (doc) {


仔细对比了两段代码,发现无法Request的方法,前段ajax代码里多了这么一句话:contentType:'appcalition/json;charset=utf-8'

用HttpWachter查看到,提交的时候Content-Type也是不一样的,ajax里面不指定contentType的截图如下:



而加了contentType的截图如下:



在网络上搜索了一下:

multipart/form-data和application/x-www-form-urlencoded的区别

FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是“application/x-www-form-urlencoded”。然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。

在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。

当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1& amp; amp;name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。

当action为post时候,浏览器把form数据封装到http body中,然后发送到server

Post提交的数据:



结论:Post提交的数据,类型不可以为application/json.....个人推测Post是以流的方式提交,而Request["keyWorkd"]方式根本无法获取到Stream上来的数据。

后台可以直接通过代码获取到post上来的stream(流)

StreamReader stream=request.getInputStream();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐