在分布式项目中经常会出现ajax的跨域,而我们一般常用的时在ajax的方法中设置或者从服务端去设置。
首先来说下这两种方法的正常设计规则。
第一种在ajax中做操作:
$.ajax({
type:"get",
dataType:"jsonp",
url:user_post+"/user/findProperty/"+uid,
success:function(){
}
});
第二种在服务器中做操作:
("Access-Control-Allow-Origin","*");
("Access-Control-Allow-Methods","GET"); //方法根据自己的方式定义
其中的dataType即为jsonp的类型,也就是服务器向客户端发送的值应为jsonp格式,但是如果我们在服务器返回一个实体bean对象的时候就会出现一个报错叫Uncaught SyntaxError: Unexpected token : 对于这个问题开始我的解决方案是考虑后台配置
@ResponseBody注解,然后的然后就是不管用,依然报错依旧。
好,既然还不行那我就用第二种吧。然而之前的错误情况解决了却又出现了另外一种
No 'Access-Control-Allow-Headers' header is present on the requested resource. Origin 'http://localhost:9991' is therefore not allowed access.
这就让我无语了,这出了一个又来一个啊。本人自知技术不熟练,也不能这么玩吧。没办法只能继续修改了。根据错误提示,是缺失头信息。然后我们需要配置缺失的信息。经过查找众多文章与实验。最后加上了下面代码后立马成功
("Access-Control-Allow-Headers","x-requested-with,content-type");
个人认为之所以jsonp失败是因为服务器返回的值跟jsonp的格式有冲突,jsonp中每个值都应该是字符串类型,而我的不是。
只能说自己才疏学浅了。
本文纯属个人意见,如有不对之处,还望指出。
处理 JSON 出现错误Uncaught SyntaxError: Unexpected token :