【问题描述】
在先后端完全分离的状况下,当咱们的前端经过Ajax访问某个后台提供的接口地址的时候,浏览器会提示错误(经过查看控制台查看),而且不能看到微信受权后的结果。总而言之就是出现了跨域问题。html
【第一种解决方法】
后台代码不要企图一次性完成全部的受权服务而且直接返回一个包含受权成功后得到的用户信息的Json数据,由于这样作虽而后台容易实现了可是前端却会遇到跨域的问题。前端
解决方法就是分步完成,首先咱们访问前台,前台经过ajax技术访问后台,后台访问微信端数据,特别注意这个时候咱们填写的回调地址是前端的地址也就是一个html地址,而后前台拿到了数据以后再次ajax提交给后台,后台再次处理,与微信端打交道,而后再次……java
总而言之就是把受权这份工做分步骤完成而且这个分步骤是先后端还有微信端都须要参与的。ajax
这种方法须要注意的是先后端事先要约定好回调地址到底是后台的哪一个地址,不可改变。若是改变的话后台的代码或者配置文件也须要改变。后端
【第二种解决方法】
这种方法一样须要一份协议:先后端须要约定好受权成功后返回的前端地址。也就是说,用户直接访问的是后台受权的地址,后台受权过程当中与微信端进行交互的过程前台不参与,受权成功后,后台将会跳转到某一个前端的地址,这个地址必须是事先约定好的,前端在这个地址上书写解析数据类型的代码便可。若是前端的这个地址改变的话,后台一样须要修改java代码或者是配置文件。(注:受权成功后先后端交互有几种方式,能够考虑后台用写url的方式传递数据给前端,也能够考虑写入session域,而后由前台被访问时ajax从后台中拿到session域中的数据)跨域
总而言之就是受权过程当中前端浑然不知,知道用户访问前台的时候前台才会调用相应的js函数进行数据的获取或者解析。浏览器
我我的比较喜欢第二种方式,可是第一种方式也很不错。若是有遇到什么问题欢迎交流。