Ajax请求的Json解析以及Post与Get方法
Posted Samnotes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax请求的Json解析以及Post与Get方法相关的知识,希望对你有一定的参考价值。
前几天看过一些前端面试题,当中见得比较多的关于ajax交互的Json解析和post、get的区别。对于绝大多数的开发者而言,这样的问题算不上难题,但是要真的平时没注意这些,简单的问题也会让人懵到。
前后端分离已经是web技术发展的趋势,前后台交互的数据以Json的形式表示出来。JSON 文本格式在语法上与创建 javascript 对象的代码相同,由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数或JSON.parse()方法(JSON.stringify()作用相反),用 JSON 数据来生成原生的 JavaScript 对象。
Ajax异步请求(两个线程的请求方式)获取到json数据后如何解析呢?我们通过案例来解释。
var Date='{"name":"某某某","age":25}';
var objDate_1=eval('('+Date+')');
var objDate_2=JSON.parse(Date);
console.log(objDate_1.name);
console.log(objDate_2.name);
console.log(objDate_2.age);
控制台输出结果是这样的:
相信到这里就已经一目了然了,需要注意的是js的eval()与JSON.parse()参数应该是字符串而不是js对象,早Date的外面加上单引号,eval()用于计算字符串表达式的值,而JSON.parse()是专门用来将json对象转为js对象的,我们优先考虑后面一种方法。如果json对象中的键值本身就是个js表达式或运算表达式,那么解析的结果必然不正确。举个栗子:
var Date_2='{"name":10*10,"age":25}';
var objdate_1=eval('('+Date_2+')');
console.log(objdate_1.name);
控制台输出结果是这样的:
遇到这种情况,JSON.parse()并不会输出10*10,而是先判断参数字符是否合法,不合法会报错,这个json字符串非法。
控制台输出结果是这样的:
这下明白ajax请求如何解析json了吧。
对于ajax请求的post与get方法区别的问题是老生常谈了,但是真的理清楚了吗?我这找到了一个比较靠谱的答案供参考:
1、传递数据的方式
GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
2、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击。
以上是关于Ajax请求的Json解析以及Post与Get方法的主要内容,如果未能解决你的问题,请参考以下文章