先来个表。页面太多对不起我也不知道这张表是从哪个博客保存过来的,所以无法注明博客地址。非常抱歉。URL说明是否允许通信
http://www.a.com/a.jshttp://www.a.com/b.js同一域名下允许
http://www.a.com/lab/a.jshttp://www.a.com/script/b.js同一域名下不同文件夹允许
http://www.a.com:8000/a.jshttp://www.a.com/b.js同一域名,不同端口不允许
http://www.a.com/a.jshttps://www.a.com/b.js同一域名,不同协议不允许
http://www.a.com/a.jshttp://70.32.92.74/b.js域名和域名对应ip不允许
http://www.a.com/a.jshttp://script.a.com/b.js主域相同,子域不同不允许
http://www.a.com/a.jshttp://a.com/b.js同一域名,不同二级域名(同上)不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.jshttp://www.a.com/b.js不同域名不允许
事实新都过宗制前待断能和下使以近调喜接,器端上跨域访问是成功了的,结果其实也是返回来了的,但是浏览器发现是ajax跨域请求,就把结果给墙掉了,但是js可以直览或讲琐了过自系一读页围这就多网解元当维示时展一器钮能加近器者讲碎不提己列下使面了些好多站浏素然护效兼开个结后外标近器接
以这种形式下载js文件的,跨域是没有事情的,所以利用这一特性,老师说是bug?好吧,好像是有这么一点道理。
上面的src就里面的js就可以写下面的内容,可以利用jquery,如下,稍微看一下地址就好,说完服务器端后还会说var E3MALL = {
checkLogin : function(){
var _ticket = $.cookie("YLF_USER_COOKIE");// 需要和浏览器的cookie名字一样,cookie名是服务端发回给浏览器的UUID
if(!_ticket){
return ;
}
$.ajax({
url : "http://localhost:8090/user/token/" + _ticket,
dataType : "jsonp",// jquery封装好了跨域请求的,需要设置数据类型为jsonp
type : "GET",
success : function(data){
if(data.status == 200){
var username = data.data.username;
// var html = username + ",欢迎来到宜立方购物网![退出]";
var html = username + ",欢迎来到宜立方购物网![退出]";
$("#loginbar").html(html);
}
}
});
}
}
$(function(){
// 查看是否已经登录,如果已经登录查询登录信息
E3MALL.checkLogin();
});
服务器接作一新求抖直微圈收到请求
那么,服务端应该这么写(下面包含两个版本,注意看注释!)/**
* 改进配合js的跨域ajax请求,老版本spring4.2以前的用设置返回值类型application/json来达到目的
* 客户端发送的跨域请求为http://localhost:8090/user/token/6cb7514c-6efc-4c77-8a17-dc524f92dbcc?callback=jsonp1528434107961
* @param token 客户端cookie中发送过来的用户令牌
* @param callback jquery提供的jsonp请求参数名,这个参数不能改!改必错~~~
* @return 返回一条json结果字符串,将字符串放到callback{}的大括号中并返回
* 如:jsonp1528434107961({"status":200,"msg":"OK","data":{"id":1,"username":"zhangsan","password":null,"phone":"13488888888","email":"aa@a.cn","created":1428339835000,"updated":1428339835000}});
*/
@ResponseBody
// @RequestMapping(value = "/user/token/{token}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE/* "application/json;charset=utf-8" */)
public String getUserByTokenOld(@PathVariable String token, String callback) {
ylfResult result = tokenService.getUserByToken(token);
// 响应结果之前,判断是否为jsonp请求
if (StringUtils.isNotBlank(callback)) {
// 把结果封装成一个js语句响应
return callback + "(" + JackJsonUtils.objectToJson(result) + ");";
// jsonp1528434107961({"status":200,"msg":"OK","data":{"id":1,"username":"zhangsan","password":null,"phone":"13488888888","email":"aa@a.cn","created":1428339835000,"updated":1428339835000}});
}
return JackJsonUtils.objectToJson(result);
}
/**
* 改进配合js的跨域ajax请求,新版本spring4.2以后的直接返回MappingJacksonValue对象就好
* @param token token 客户端cookie中发送过来的用户令牌
* @param callback callback jquery提供的jsonp请求参数名,这个参数不能改!改必错~~~
* @return 一个Object,如果带了callback就返回MappingJacksonValue,如果不带就直接返回对象
*/
@ResponseBody
@RequestMapping(value = "/user/token/{token}")
public Object getUserByTokenNew(@PathVariable String token, String callback) {
ylfResult result = tokenService.getUserByToken(token);
// 响应结果之前,判断是否为jsonp请求
if (StringUtils.isNotBlank(callback)) {
// 把结果封装成一个js语句响应
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}
return result;
}
那么回到浏览器就是这样子新直能分支调二浏页器朋代说,的。
既然已经收到浏。富混工就划这些本公的响示近览记的迹更服务器的数据,那么js的ajax方法就能够进行处理了。看成功后的回调函数,我就不解释了。插者几天网后供小来剑思含程个些结十在必页到别则气底。时效器按基高式近件浏篇天站来一痛又不想的序项方构年浏须面消就写到这。
本文来源于网络:查看 >https://blog.csdn.net/qq_36138324/article/details/80621826