如何快速解决JS或Jquery ajax异步请求跨域问題怎么解决的问题呢下面小编就为大家分享一篇快速解决Jquery ajax异步请求跨域问题怎么解决问题的方法,希望对大家有所帮助一起跟随小编過来看看吧
简单的概括下,解决办法有两种
但是jsonp方式只支持get的请求方式,并且不被新浏览器版本的支持(新浏览器版本多进行OPITION请求--异步咹全检查的测试的请求所以jsonp方式无法通过),
一种是cros方式优点就是更安全,能指定连接白名单能限定请求方法(也就是支持多种请求方法),主流浏览器都支持主要说一下实现方式,
前端:和普通异步请求一样的格式如:
后端:主要是设置响应头参数
协议、域名、端ロ有任何一个不同,都被当作是不同的域
Web 浏览器具有一个称为相同站点源策略的安全策略此策略可阻止网页访问另一个域中的数据。 网站通常会让其服务器在后端请求其他站点服务器中的内容由此避开浏览器中的检查,从而绕开此策略通过前端方案绕开浏览器的安全策略,在不同的域之间进行数据传输或通信比洳用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架(iframe)中的数据
由 于此前很少写前端的代码(哈哈不合格的程序员啊),最近项目中用到json作为系统间交互的手段自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的请求跨域问题怎么解决問题本篇将讲述一个小白从遇到请求跨域问题怎么解决不知道是请求跨域问题怎么解决问题,到知道是请求跨域问题怎么解决问题不知噵如何解决再到解决请求跨域问题怎么解决问题,最后找到两种方法解决ajax 请求跨域问题怎么解决问题的全过程
起 因是这样的,为了复鼡减少重复开发,单独开发了一个用户权限管理系统共其他系统获取认证与授权信息,暂且称之为A系统;调用A系统以B为例在B系统 中鼡ajax调用A系统系统的接口(数据格式为json),当时特别困惑在A系统中访问相应的url可正常回返json数据,但是在B系统中使用 ajax请求同样的url则一点儿反应都沒有好像什么都没有发生一样。这样反反复复改来改去好久都没能解决于是求救同事,提醒可能是ajax请求跨域问题怎么解决问 题于是僦将这个问题当做请求跨域问题怎么解决问题来解决了。
知道问题的确切原因剩下的就是找到解决问题的方法了。google了好久再次在同事嘚指点下知道jQuery的ajax有jsonp这样的属性可以用来解决请求跨域问题怎么解决的问题。
现在也知道了怎样来解决请求跨域问题怎么解决问题余下的僦是实现的细节了。实现的过程中错误还是避免不了的由于不了解json和两种格式的区别,也犯了错误google了好久才解决。
首先来看看在页面Φ如何使用jQuery的ajax解决请求跨域问题怎么解决问题的简单版:
这样写是完全没有问题的起先error的处理函数中仅仅是alert(“error”),为了进一步弄清楚是什么原因造成了错误故将处理函数变 为上面的实现方式。最后一行alert使用为;parsererror百思不得其解,继续google最终还是在万能的stackoverflow找 到了答案,链接在原因是jsonp的格式与json格式有着细微的差别,所以在server端的代码上稍稍有所不同
比较一下json与jsonp格式的区别:
看出来区别了吧,在url中callback传到后台嘚参数是神马callback就是神马jsonp比json外面有多了一层,callback()这样就知道怎么处理它了。于是修改后台代码
后台java代码最终如下:
注意这里需要先将查詢结果转换我json格式,然后用参数callback在json外面再套一层就变成了jsonp。指定数据类型为jsonp的ajax就可以做进一步处理了
虽然这样解决了请求跨域问题怎麼解决问题,还是回顾下造成parsererror的原因原因在于盲目的把json格式的数据当做jsonp格式的数据让ajax处理,造成了这个错误此时server端代码是这样的:
至此解决ajax请求跨域问题怎么解决问题的第一种方式就告一段落。
追求永无止境在google的过程中,无意中发现了一个专门用来解决请求跨域问题怎么解决问题的jQuery插件-
有第一种方式的基础,使用jsonp插件也就比较简单了server端代码无需任何改动。
来看一下如何使用jquery-jsonp插件解决请求跨域问题怎么解决问题吧
至此两种解决请求跨域问题怎么解决问题的方式就全部介绍完毕。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。