[size=large][color=darkred]1.模拟跨域[/color][/size]
[size=large][color=darkred]2.getJson解决跨域[/color][/size]
[size=large][color=darkred]3.跨域原理[/color][/size]
问题:localhost使用jsp,而该jsp访问test域名,服务器处理的数据会返回到localhost,而非test。造成跨域问题
原理:jsonp底层桶过javascript可以读取“任何”地址的js脚本片段
1:在jsp使用getJSON发送请求,拼接callback参数给服务器
2:服务器拼接getJSON的callback函数的参数,返回给jsp
3:jsp执行返回的js脚本片段(回调)
4:相当于ajax异步处理了这次请求
差不过这意思,如有不对请谅解。
<script type="text/javascript">
$(function(){
// 同域请求
/*
$.get("${pageContext.request.contextPath}/demo5.action", function(data){
alert(data);
});
*/
// 跨域请求 当前域名 localhost
// $.get 无法跨域
/*
$.get("http://www.test.cn:8080/jquery_ajax_day2/demo5.action", function(data){
alert(data);
});
*/
// 使用$.getJSON 实现跨域
$.getJSON("http://www.test.cn:8080/jquery_ajax_day2/demo5.action","callback=?", function(data){
alert(data.name);
});
});
</script>
[size=large][color=darkred]2.getJson解决跨域[/color][/size]
// 跨域请求问题
public class Demo5Action extends ActionSupport {
// 回调函数名
private String callback;
public void setCallback(String callback) {
this.callback = callback;
}
@Override
public String execute() throws Exception {
ServletActionContext.getResponse().setContentType("text/javascript;charset=utf-8");
ServletActionContext.getResponse().getWriter().print(callback + "({\"name\":\"xxx\"})");
return NONE;
}
}
[size=large][color=darkred]3.跨域原理[/color][/size]
问题:localhost使用jsp,而该jsp访问test域名,服务器处理的数据会返回到localhost,而非test。造成跨域问题
原理:jsonp底层桶过javascript可以读取“任何”地址的js脚本片段
1:在jsp使用getJSON发送请求,拼接callback参数给服务器
2:服务器拼接getJSON的callback函数的参数,返回给jsp
3:jsp执行返回的js脚本片段(回调)
4:相当于ajax异步处理了这次请求
差不过这意思,如有不对请谅解。