一、使用jsonp
ajax本身是不可以跨域的,通过产生一个script标签来实现跨域。因为script标签的src属性是没有跨域的限制的。其实设置了dataType: 'jsonp'后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。.
Jquery中ajax的核心是通过 XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的 js脚本。因为jsonp 跨域的原理就是用的动态加载<script>的src ,所以我们只能把参数通过url的方式传递,所以jsonp的 type类型只能是get !
代码:js
$.ajax({
type : "get", //jquey是不支持post方式跨域的
async:false,
url : "http://*************", //跨域请求的URL
dataType : "jsonp",
data:{licenceNum:xkzh},
jsonp: "callBack", // 指定回调函数名,与服务器端接收的一致,并回传回来
success : function(data){
var errcode = data.errcode;
console.log(errcode);
}
});
代码:java
public void jsonpGetMsg(HttpServletResponse response,HttpServletRequest request){
String callBack = request.getParameter("callBack");//和前端回调函数名一直
String data = "{\"name\":\"湖南省\",\"regionId\":134}";//json对象
String backFunction = callBack+"("+data+")";
PrintWriter out=null;
try {
out = response.getWriter();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.write(backFunction);
out.close();
}
参考文章