我把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();
contentType代表服务器收到数据的格式,dataType时我们收到服务器传过来数据的格式,当contentType的值设置成"application/json"的时候 就代表时自定义格式,在传输数据的时候需要用 JSON.stringify序列化后,然后发送,在服务器端接到然后用 JSON.parse 进行还原就行了,这样就能处理复杂的对象了。
我使用如下这种方式,获取到了数据:
StreamReader sr = new StreamReader(Request.InputStream);
String end= sr.ReadToEnd();
我也觉得很奇怪,最开始的时候,是获取不到数据。后来,我在网上试其他方式。后来在再一次尝试的时候,发现居然可以从流中获取到数据,有可能是缓存的原因。
一般来说,如果后端遇上不支持的ContentType话,那么就转化为流的形式。我使用的是ASP.NET,发现并没有现成的方法对application/json这种数据格式的直接支持,因此只能直接从流中获取。
后端这么写试试
string getClientJsonData= Requst.Form[0];