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

2019-01-03 00:34发布

我把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();

3条回答
Anthone
2楼-- · 2019-01-03 00:52

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

查看更多
放荡不羁爱自由
3楼-- · 2019-01-03 00:57

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

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

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

查看更多
forever°为你锁心
4楼-- · 2019-01-03 01:10

后端这么写试试

string getClientJsonData= Requst.Form[0];

查看更多
登录 后发表回答