ajax 跨域请求(后端语言为 Java)
2016-09-01 09:50
489 查看
ajax 跨域请求(servlet容器为tomcat)
有两种解决办法
1:jquery jsonp方式(据说不支持 POST,即使将 type 的值修改为 POST ,也会被当成 GET 请求)
js示例代码
function ajaxJsonp() {
$.ajax({
url : “http://web2.lp.com:8080/MytestWeb/setcookie?ajaxType=jsonp” ,
type : “GET”,
async : false,
dataType : “jsonp”,
jsonpCallback : “jsonpCallback”,//自定义的jsonp回调函数名,默认为jQuery自动生成的随机函数
jsonp : “callback”,//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为callback)
success : function(data) {
alert( “服务器连接成功 ajaxJsonp” );
},
error : function(data) {
alert( “服务器连接失败 ajaxJsonp” );
}
});
}
服务器端实例代码
System.out.println(“servlet get jsonp”);
String jsonp = request.getParameter( “callback”);
response.setContentType( “text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
out.write(jsonp + “({\”name\”:\”joy\”})” );
out.flush();
out.close();
2:CROS方式(如果要支持post请求,将ajax的type修改为 POST 就可以了)
js示例代码,就是普通的ajax请求
function ajax() {
var url;
url = “http://web2.lp.com:8080/MytestWeb/setcookie?ajaxType=native” ;
$.ajax({
url : url,
type : “GET”,
async : false,
success : function(data) {
alert( “服务器连接成功 ajax” );
},
error : function(data) {
alert( “服务器连接失败 ajax” );
}
});
}
服务器端实例代码
//Access-Control-Allow-Origin 头的值为 * 表示服务器接受所有的不用源的请求,也可以是特定的域 例如:http://duobao.jd.com:8976(如果不是80端口,
//一定要将端口号写上),注意 http 只能有一个 Access-Control-Allow-Origin头,头的值 只能是 * 或者 一个域(例如:http://duobao.jd.com:8976 )。
response.setHeader( “Access-Control-Allow-Origin”, “*” );
PrintWriter out = response.getWriter();
out.write(“{\”name\”:\”joy\”}” );
out.flush();
out.close();
注意事项
如果ajax中包含,contentType: “application/json” 请求方式为 POST 那么需要重写HttpServlet 中的 doOptions 方法
@Override
protected void doOptions(HttpServletRequest request, HttpServletResponse response) {
System. out.println( “doOptions request method ” + request.getMethod());
response.setHeader( “Access-Control-Allow-Origin”,”*” );
response.setHeader( “Access-Control-Allow-Headers”, “Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type”);
}
同时 doPost 方法也要包含 方法 response.setHeader( “Access-Control-Allow-Origin”, “*” ) 代码
有两种解决办法
1:jquery jsonp方式(据说不支持 POST,即使将 type 的值修改为 POST ,也会被当成 GET 请求)
js示例代码
function ajaxJsonp() {
$.ajax({
url : “http://web2.lp.com:8080/MytestWeb/setcookie?ajaxType=jsonp” ,
type : “GET”,
async : false,
dataType : “jsonp”,
jsonpCallback : “jsonpCallback”,//自定义的jsonp回调函数名,默认为jQuery自动生成的随机函数
jsonp : “callback”,//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为callback)
success : function(data) {
alert( “服务器连接成功 ajaxJsonp” );
},
error : function(data) {
alert( “服务器连接失败 ajaxJsonp” );
}
});
}
服务器端实例代码
System.out.println(“servlet get jsonp”);
String jsonp = request.getParameter( “callback”);
response.setContentType( “text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
out.write(jsonp + “({\”name\”:\”joy\”})” );
out.flush();
out.close();
2:CROS方式(如果要支持post请求,将ajax的type修改为 POST 就可以了)
js示例代码,就是普通的ajax请求
function ajax() {
var url;
url = “http://web2.lp.com:8080/MytestWeb/setcookie?ajaxType=native” ;
$.ajax({
url : url,
type : “GET”,
async : false,
success : function(data) {
alert( “服务器连接成功 ajax” );
},
error : function(data) {
alert( “服务器连接失败 ajax” );
}
});
}
服务器端实例代码
//Access-Control-Allow-Origin 头的值为 * 表示服务器接受所有的不用源的请求,也可以是特定的域 例如:http://duobao.jd.com:8976(如果不是80端口,
//一定要将端口号写上),注意 http 只能有一个 Access-Control-Allow-Origin头,头的值 只能是 * 或者 一个域(例如:http://duobao.jd.com:8976 )。
response.setHeader( “Access-Control-Allow-Origin”, “*” );
PrintWriter out = response.getWriter();
out.write(“{\”name\”:\”joy\”}” );
out.flush();
out.close();
注意事项
如果ajax中包含,contentType: “application/json” 请求方式为 POST 那么需要重写HttpServlet 中的 doOptions 方法
@Override
protected void doOptions(HttpServletRequest request, HttpServletResponse response) {
System. out.println( “doOptions request method ” + request.getMethod());
response.setHeader( “Access-Control-Allow-Origin”,”*” );
response.setHeader( “Access-Control-Allow-Headers”, “Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type”);
}
同时 doPost 方法也要包含 方法 response.setHeader( “Access-Control-Allow-Origin”, “*” ) 代码
相关文章推荐
- html用ajax请求服务器后端java接口跨域问题解决
- java、jquery 、ajax跨域请求获取返回值(jsonp格式)
- java网络编程____Ajax请求跨域的问题解决
- JAVA SSM框架中解决ajax及swagger测试请求跨域问题
- $ajax 跨域请求 node.js 前后端写法
- ajax跨域请求,页面和java服务端的写法
- ajax跨域请求java需要注意的事项
- $.ajax请求 + php后端代码+跨域
- ajax跨域请求的三种方式(js+java)
- ajax 请求 JAVA WEB应用程序实现跨域请求
- ajax请求,跨域问题,在Java客户端中解决
- 在前后端分离的项目中,ajax跨域请求怎样附带cookie
- Java后台处理ajax跨域请求处理
- ajax跨域请求,页面和java服务端的写法
- 在前后端分离的项目中,ajax跨域请求怎样附带cookie
- 配置 cros Java 前后端分离跨域请求
- java ajax post跨域请求传递json格式数据问题
- 在前后端分离的项目中,ajax跨域请求怎样附带cookie
- 详解Java Ajax jsonp 跨域请求
- 前后端分离,java配置跨域请求问题