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

在$.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();
原文地址:https://www.cnblogs.com/wanglee/p/2862269.html