您的位置:首页 > 编程语言 > Java开发

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”, “*” ) 代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: