这篇文章主要为大家详细介绍了解决AJAX的跨域访问-两种有效示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!新的W3C策略实现了HTTP跨域访问,还亏我找了很久的资料解决这个问题:

只需要在servlet中返回的头部信息中添加Access-Control-Allow-Origin这个既可。

比如我要开放所有我本地的跨域访问,就设置如下:response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1/*");

这样我本地的A工程中的AJAX请求就可以跨域请求B工程中的servlet。

代码如下:

HTML的JS的ajax请求:

代码如下:

/* Create a new XMLHttpRequest object to talk to the Web server */

var xmlHttp = false;

/*@cc_on @*/

/*@if (@_jscript_version >= 5)

try {

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e2) {

xmlHttp = false;

}

}

@end @*/

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {

xmlHttp = new XMLHttpRequest();

}

var url = "http://127.0.0.1:2012/esb/servlet/HttpClient?randomType=MIX";

xmlHttp.open("GET", url, true);

//Setup a function for the server to run when it's done

xmlHttp.onreadystatechange = function(){

if (xmlHttp.readyState == 4) {

var response = xmlHttp.responseText;

alert(response);

}

}

//Send the request

xmlHttp.send(null);

servlet代码:

代码如下:

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException {

resp.setHeader("Pragma", "no-cache");

resp.setHeader("Cache-Control", "no-cache");

//下面那句是核心

resp.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1/*");

resp.setDateHeader("Expires", 0);

ServletOutputStream sos = resp.getOutputStream();

try {

sos.write(obj.toString().getBytes("GBK"));

} catch (Exception e) {

System.out.println(e.toString90)

} finally {

try {

sos.close();

} catch (Exception e) {

LOG.error(e);

}

}

}

代码在本机测试是可以的,待过两天,我把servlet放到服务器上去,然后再本地测试。

上面的方式虽然很完美的解决了问题,但是上面的文章也说了。可能存在安全问题,而且新标准是否都支持还是个问题,所以我们可以套用另外一种取巧的方式来完成同样的效果,因为js不存在跨域问题,如果我们服务器的servlet返回的是JS脚本,那就可以了。我们可以在A工程的js中使用javascript的src来访问B工程的servlet,然后通过servlet输出的js脚本来传递数据。因此根据这个思想我又做了下面代码的测试:

页面的JS代码:

代码如下:

function loadAjax(){

id="testesbscript";

oScript = document.getElementById(id);

var head = document.getElementsByTagName("head").item(0);

if (oScript) {

head.removeChild(oScript);

}

oScript = document.createElement("script");

var url = "http://127.0.0.1:2012/esb/servlet/HttpClient?randomType=MIX&success=justHandle

oScript.setAttribute("id",id);

oScript.setAttribute("type","text/javascript");

oScript.setAttribute("language","javascript");

head.appendChild(oScript);

}

//jsutHandle这个函数是反调函数。servlet代码中会使用eval这种方式来执行。

function justHandle(dd){

alert(dd);

}

servlet的代码:

代码如下:

protected void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, java.io.IOException {

Object obj = "test";

ServletOutputStream sos = resp.getOutputStream();

StringBuffer sb = new StringBuffer();

resp.setCharacterEncoding("GBK");

resp.setHeader("Charset","GBK");

resp.setContentType("charset=GBK");

//下面那句表明是javascript脚本文件

resp.setContentType("text/javascript");

sb.append("eval(/""+paramMap.get("success")+"(/'"+obj.toString()+"/')/")");

try {

sos.write(sb.toString().getBytes(this.character_encoding));

} catch (Exception e) {

System.out.println(e.toString());

} finally {

try {

sos.close();

} catch (Exception e) {

System.out.println(e.toString());

}

}

}

注:关于解决AJAX的跨域访问-两种有效示例的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

关键词:

您可能感兴趣的文章

vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例相关推荐

  1. java解压缩文件名乱码_解决JDKZipEntry压缩文件名乱码的两种方法

    当我们在创建java的项目过程中,有时候会遇到一些棘手的问题,就比如说:在JDk zipEntry压缩中文文件名出现乱码的问题.那么对于这个问题,我们应该怎样来解决呢?今天我们就一起来学习一下它的解决 ...

  2. ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误

    如何解决AJAX中跨域访问出现'没有权限'的错误 很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见 禁止访问非同域的网 ...

  3. 什么是ajax跨域问题,如何解决ajax跨域问题

    <如何解决ajax跨域问题>由会员分享,可在线阅读,更多相关<如何解决ajax跨域问题(5页珍藏版)>请在人人文库网上搜索. 1.如何解决ajax跨域问题 由于此前很少写前端的 ...

  4. Ajax向后端发送PUT请求的两种方法

    文章目录 一.将POST请求修改为PUT请求 二.直接发送PUT请求 一.将POST请求修改为PUT请求 通过HiddenHttpMethodFilter过滤器将POST请求修改为PUT请求 需要传入 ...

  5. 解决GitHub下载资源慢的问题(两种方法)

    解决GitHub下载资源慢的问题    最近需要使用GitHub下载一个比较大的资源,在以前一直用GitHub下载开源资源,速度一直都是很慢的,但是由于这次文件比较大,使用GitHub进行下载,速度只 ...

  6. jquery发送put请求_通过 Ajax 发送 PUT、DELETE 请求的两种实现方式

    一.普通请求方法发送 PUT 请求 1. 如果不用 ajax 发送 PUT,我们可以通过设置一个隐藏域设置 _method 的值,如下: 2. 控制层: @RequestMapping(value=& ...

  7. thinkphp开启子域名无法正常访问_解决TP6报错“当前访问路由未定义或不匹配”...

    如果是报路由错误,则说明启用了路由控制,那么所有被访问的页面都需要配置路由,否则将无法访问. 例如: 在浏览器中运行http://hml.tp6.com/admin/getlog 报错:当前访问路由未 ...

  8. php 不允许外部访问,[日常] 解决mysql不允许外部访问

    1.在端口已经开放的情况下,ubuntu mysql 3306允许远程访问 vim /etc/mysql/mysql.conf.d/mysqld.cnf 注释#bind-address = 127.0 ...

  9. 【51拓展】KeilC51访问RAM、ROM指定地址内存的两种方法(指针访问+绝对地址访问)

    文章目录 1 指针访问方法 1.1 关键词及解释 1.2 代码及调试 1.3 51单片机数据在内存中的存储模式 2 绝对地址访问方法 2.1 绝对宏 2.2 关键词`_at_` 1 指针访问方法 1. ...

最新文章

  1. 实现账号在一端登入_跟我学spring security 基于数据库实现一个基本的登入登出...
  2. sql server 作业收缩数据库
  3. 稳健估计/M估计/最小二乘法
  4. CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
  5. 用计算机怎么计算税率,一般纳税人税率计算器,一般纳税人税率如何计算?
  6. Obsidian关系图谱如何让节点可以手动拖动
  7. matlab 线性拟合polyfit_Matlab 线性拟合 非线性拟合_matlab非线性拟合函数
  8. ieeetran_IEEEtran BibTex样式
  9. 法国电子与计算机信息工程学校排名,法国工程学院的十大排名情况
  10. 基于pam实现的批量执行命令工具-Cyberark
  11. Python之路----文件操作
  12. 大数据高级开发工程师——Spark学习笔记(6)
  13. 合肥计算机专业大学排名23,计算机专业大学排名
  14. npm无法加载文件,无法下载依赖包
  15. python supper菱形继承
  16. 新能源汽车行业研究报告
  17. STM32内存管理方法
  18. C语言——leetcode69——X的平方根
  19. 【Simulink教程案例17】基于simulink的伪码序列相关峰检测仿真——将matlab数据导入到Simulink中作为信号源
  20. java雪人程序_java的几种引用类型

热门文章

  1. 李开复:非常看好移动互联网的未来 --记CSDNCTO俱乐部李开复交流会
  2. c#后台线程更新界面
  3. 《SolidWorks 2016中文版机械设计从入门到精通》——1.10 范例
  4. HTML5性能优化需要注意的几个问题
  5. ExtJs之Field.Trigger和Field.Spinner
  6. 在CISCO上做单臂路由
  7. printf, sprintf - 转换成指定格式的输出结果.
  8. hdu 5428(分解质因子)
  9. 并查集杭电1272小希的迷宫
  10. NYOJ 士兵杀敌(四) 树状数组