解决ajax跨域问题

来源:互联网 发布:公众号如何推广淘宝客 编辑:程序博客网 时间:2024/06/11 20:43


场景:项目中我负责后台接口开发,接口提供给app端的开发人员。app端ajax远程请求服务器时会出现ajax跨域问题。由于我是第一次开发 以前也没碰到过。所以我又上网查了帖子,最后大致知道了实现方式。虽然不太了解原理。但是也解决了这个问题,所以记录一下,方便自己以后复习。


思路:ajax请求后台时,在dataType的属性写上'jsonp',然后增加一个新的属性:jsonp,属性值为任意字符(比如jsonpCallback),在后台

可以用这个字符名接到一个值,而这个值在后台数据返回的时候要用到。因为用jsonp返回数据时的格式和普通返回不一样。jsonp 返回数据的格式是要返回一个类似js函数的格式 但是没有{},而你要返回的数据就放在参数中,具体的格式是:函数名(后台要传输的数据),这里的函数名就是‘jsonpCallback’所接到的实际参数,后台传输的数据就是自己要返回的数据,比如ajax请求时,后台接到的‘jsonpCallback’的值是"1223541_js",你后台要返回你数据是个名叫dataList的集合。 然后 你可以后台拼接成上述格式 最终返回为这样格式的:   1223541_js‘dataList’) ,就可以了。


注意:①为什么要用jsonp属性的传入后台参数的值做返回函数的函数名? :因为 每个ajax都会生成不同的随机字符,用随机字符做返回值,这样可以找到是哪个ajax发出的请求。

               ② ()里是要返回的参数,但必须拼接上单引号,使其作为变量参数回传。


前台ajax的格式如图:


上面是前台的请求格式,其实和普通的ajax没有区别,就是dataType值变成了jsonp,然后多了个属性:jsonp 属性值可以随便写。当ajax请求后台时,后台根据jsonp中的字符串名获取真正的值 然后拼接 再作返回。返回的值就在回调函数的参数中。然后就可以像普通ajax的操作一样了。

后台代码:

//代码不全还有许多注解没有加 但是不影响操作 public class TestJsonpAction{  //前台请求时进入的方法  public String getLogisticsStatusList () {  String jsonpCallback = getParameter("jsonpCallback");//接收ajax请求的参数。  ……//接收的其他数据 还有其他处理的代码  List<Map> result = page.getResult();//后台要返回的数据  String resultDate = JSONObject.fromObject(results).toString();//将数据转成json格式(项目需要)  //由于每次都要拼接数据所以把拼接部分写成工具类,此处调用。(下方有工具类代码)  String callBackData= JsonUtil.getJsonCallBackString( resultDate , jsonpCallback);//调用工具类拼接成jspon需要的格式      Struts2Utils.renderJson( callBackData ); //最终返回前台的数据  }}

拼接格式的工具类:

package com.nebula.app.app.common.utils;public class JsonUtil {/** * @param str 要回传前台的数据 *  * @param jsonpCallback 前台接收的jsonp传递的值 *  * */public static String getJsonCallBackString(String  str ,String jsonpCallback){if(jsonpCallback == null ||"".equals(jsonpCallback)){return str;}else{return jsonpCallback+"('"+str+"')";}        } } 


大神的博客 里面有专业的介绍
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 门锁住了没钥匙怎么办 车被别人锁住了怎么办 汽车轱辘被锁了怎么办 小车轮胎被锁了怎么办 国防光缆无明显标识被挖断怎么办 临工210挖掘机柴油进气怎么办 汽车抛光蜡干了怎么办 洗碗铁丝球吃了怎么办 牙套铁丝吃肚子怎么办 小铁丝吃到肚子怎么办 绿色抛光膏干了怎么办 不锈钢被盐酸弄黑了怎么办 不锈钢被草酸洗了怎么办 不锈钢洗菜盆被草酸腐蚀了怎么办 汽油发电机加了柴油怎么办 装载机发动机加入齿轮油怎么办 印尼的FromE错了怎么办 寄快递被弄坏了怎么办 福田口岸手表被扣怎么办? 网页显示与服务器连接失败怎么办 唯品会中发货无法清关怎么办 国际快递被海关扣了怎么办 我想开一家物流公司手续怎么办? 物流公司把我的货弄丢了怎么办 物流公司压司机工资怎么办 立元增压泵不出水怎么办 高浊度pac不沉怎么办 集水池中沉积大量污泥怎么办 电脑qq截图不好使怎么办 捡了个手机需要指纹怎么办 手机锁屏锁住了怎么办 三星屏锁忘记了怎么办 文字下面有蓝色直线怎么办 苹果x不能截屏了怎么办 u盘在电脑上打不开怎么办 电脑桌面上文档剪切了怎么办 苹果官网查不到保修日期怎么办 吃了发霉的花生怎么办 鸡吃大蒜多了怎么办 玖瑰花叶子黄怎么办 羊偷吃腥油和花生饼吃多了怎么办