其实后端可以返回很多种数据。包括一个静态页面。.html、文本数据text、还有常用的json数据交互方式。
从数据传输的角度来讲,后端交给前端的数据都是0101型的二进制文件,关键在于前端如何解析、按什么方式解析这个二进制文件。
$.ajax() 中有一个dataType参数决定按什么方式来解析返回的二进制文件。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断
其次是服务器端响应头的:
Content-Type: application/json; charset=utf-8
在我们平常的编程中, 服务器端相应头都由服务器或者框架来完成,应该是在控制器中根据我们写的返回值类型来判断响应头的格式。
也就是说,如果$.ajax()中不定义dataType参数,那么它会根据服务器端给出的内容来解析。
如果定义了dataType,那么就会按照定义的类型解析。
按照我的理解:
如果datatype:json(小写),那么function(data)中的data就会被解析为一个json对象。可以直接使用data.xxx进行数据获取。
如果按照datatpye:text,那么二进制流就会被解析为string字符串,如果是json格式的字符串,那么使用json.parse(data)就可以解析为一个json对象,进而可以获取里边的数据。
如果按照一个html来解析,那么应该是新建一个标签页打开这个html页面。
后端返回json数据,后端返回json格式的一个字符串,这有什么区别吗?
按照以上理解,返回json数据可以直接对data进行操作,比如data.name获取到“小明”
如果是json格式的字符串,也就是后端返回形如“{“\”name\“:\”小明\“}”,(\为转义字符),那么前端还需要var res = json.parse(data),才能使用res.name获取到”小明“
前端如何返回json数据或者json格式的字符串呢?
一般来讲,使用某个方法,比如json
返回json数据:return json(一个对象)、return json(一个数组)、return json(一个字符串),就可以把对象自动转换成json并返回。
参考:https://jingyan.baidu.com/article/e9fb46e146fe487521f7660e.html
返回json格式的字符串:
1.就是返回一个string,但格式得正确,不然解析json.parse(data)可能会出错
2.通过某个方法直接生成符合json格式的字符串,比如c#中:
return JsonConvert.SerializeObject(datatable);
可以把数据库查询的到的结果(是一个表)直接转换称为json格式的字符串!
总结:
我觉得就是多了一句json.parse(data)的不同,还有后端返回格式写法的不同。后端返回的二进制流按照指定编码解码后,解码后的内容,区别就在于有没有双引号,有没有转义字符等,然后对应不同的json对象生成方式生成json对象。
直接按照json形式返回会代码前后端都会简单些。
按照json格式的字符串返回,后端的json格式字符串可能比较难创造,前端还需要json.parse(data)进行解析,但是比较容易理解。