js跨域

跨域问题是由于javascript语言安全限制中的同源策略造成的.

简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合.

  • js不能跨域请求数据,但可以跨域请求js片段(jsonp)。
  • 可以在把数据如Json包装为一个js片段,可以把数据使用js方法来包装,形成一条方法的调用语句。
  • 可以使用ajax请求js片段,当js判断到达浏览器会被立即执行。
  • 在浏览器端,先创建好回调方法,在回调方法中通过参数可以获得请求的数据。

比如数据为一段json,{“name”: “testName”},则可以在客户端定义一个方法如

function callback(json){
    console.log(json);
}

然后在服务器端将json数据包装:

callback({“name”: "testName"});
//@RequestMapping()中需要设置属性:
//produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8"
//是设置返回数据的编码格式,防止乱码。

这样在客户端用ajax请求时就可以成功,而且js片段到达客户端是立即执行的,在客户端会执行callback方法。

服务器端包装数据的时候,有是需要包装,有时不需要,但包装的话需要用到String连接方法名,所以我们需要将json转化为String。

String json = JsonUtils.objectToJson(result);

这样就可以把json转化为String类型。

另一种方式:

@RequestMapping("directives.json")
@ResponseBody
public MappingJacksonValue directives(String callback) {
    MappingJacksonValue mappingJacksonValue = new MappingJacksonValue("you can put everything here.");
    mappingJacksonValue.setJsonpFunction(callback);
    return mappingJacksonValue;
}

其中,callback为请求传递过来的方法名
mappingJacksonValue的setJsonFunction()方法可以将方法名加到数据的外面,即包装数据。
JsonP不仅能用在ajax请求中,在<script>标签中也同样可以,即设置其src属性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值