ajax跨域请求问题

$("#qwer").click(function(){
	$.ajax({
		type : "POST",
		url : ctx + "/test/aaa?callback=?",
		//url : ""
		dataType : 'json',
		success : function(data) {
			alert('sssss');
		}
	});
});

ajax跨域:ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告

如果服务端和客户端我们都可以控制,对服务端进行改造,跨域请求添加一个参数callback可以随意设置,这个参数加在url请求的后面,服务端响应请求后需要在返回的数据外面包裹一层:包裹callback参数名称(json数据)
一般jquery解决跨域是通过jsonp的方式,添加callback=xxx,服务器返回xxx(...)

response.setContentType("application/json;charset=utf-8");
response.getWriter().write(request.getParameter("callback") + "(" + new Gson().toJson(result.getResult()) + ")");



另一种方法:cors跨域资源共享【网络浏览器的技术规范,为web服务器定义了一种方式,允许网页从不同的域访问它的资源】通过在服务端设置"Access-Control-Allow-Origin"来进行的
 Access-Control-Allow-Origin。HTTP响应头,指定服务器端允许进行跨域资源访问的来源域。可以用通配符*表示允许任何域的JavaScript访问资源,但是在响应一个携带身份信息(Credential)的HTTP请求时,Access-Control-Allow-Origin必需指定具体的域,不能用通配符。

在地址url前加前缀:"http://www.corsproxy.com/"将不允许跨域的请求变为允许跨域的请求
www.corsproxy.com  大概是在今年2月份左右挂掉的,具体信息和关闭理由未知。
能应用于所有的跨域请求,原理就是过一遍代理然后在header里写上 Access-Control-Allow-Origin:*
现在的替代站点有 http://crossorigin.me/ http://atcors.herokuapp.com/ 。国内不清楚,不过北美这边相应速度倒是挺快的。
或者你可以选择自己搭一个专用的。 corsproxy-npm

现在只能在自己的后端代码加
respons.setHeader("Access-Control-Allow-Origin", "*");



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值