首页 新闻 会员 周边

ContentType设置为application/json后,就收不到数据

0
悬赏园豆:5 [已解决问题] 解决于 2018-06-26 09:31

我把Ajax请求端的ContentType设置为application/json,在后台就拿不到要提交的数据。

                $.ajax({
                    url: "test2",
                    type: "POST",
                    dataType: 'json',
                    contentType: 'application/json',
                    data: JSON.stringify({ a: [{ b: 1, a: 1 }] })
                });

后台尝试获取的数据代码:

            String[] keys= Request.Form.AllKeys;
            String path= Request.Url.ToString();

            //Request.InputStream;
            StreamReader sr = new StreamReader(Request.InputStream);
            String end= sr.ReadToEnd();

            ReadEntityBodyMode r = Request.ReadEntityBodyMode;
            String srt= r.ToString();

HDWK的主页 HDWK | 初学一级 | 园豆:152
提问于:2018-06-25 15:11
< >
分享
最佳答案
0

我使用如下这种方式,获取到了数据:
            StreamReader sr = new StreamReader(Request.InputStream);
            String end= sr.ReadToEnd();

我也觉得很奇怪,最开始的时候,是获取不到数据。后来,我在网上试其他方式。后来在再一次尝试的时候,发现居然可以从流中获取到数据,有可能是缓存的原因。

一般来说,如果后端遇上不支持的ContentType话,那么就转化为流的形式。我使用的是ASP.NET,发现并没有现成的方法对application/json这种数据格式的直接支持,因此只能直接从流中获取。

HDWK | 初学一级 |园豆:152 | 2018-06-26 09:30
其他回答(2)
0

contentType代表服务器收到数据的格式,dataType时我们收到服务器传过来数据的格式,当contentType的值设置成"application/json"的时候  就代表时自定义格式,在传输数据的时候需要用 JSON.stringify序列化后,然后发送,在服务器端接到然后用 JSON.parse 进行还原就行了,这样就能处理复杂的对象了。

收获园豆:1
^keepHungry$ | 园豆:516 (小虾三级) | 2018-06-25 15:41
0

后端这么写试试

string getClientJsonData= Requst.Form[0];

收获园豆:4
DNLi | 园豆:316 (菜鸟二级) | 2018-06-26 08:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册