vb跨域访问ajax,解决AJAX的跨域访问-两种有效示例
这篇文章主要为大家详细介绍了解决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的跨域访问-两种有效示例相关推荐
- java解压缩文件名乱码_解决JDKZipEntry压缩文件名乱码的两种方法
当我们在创建java的项目过程中,有时候会遇到一些棘手的问题,就比如说:在JDk zipEntry压缩中文文件名出现乱码的问题.那么对于这个问题,我们应该怎样来解决呢?今天我们就一起来学习一下它的解决 ...
- ajax 没有权限 -quot;跨域quot;,如何解决AJAX中跨域访问出现'没有权限'的错误
如何解决AJAX中跨域访问出现'没有权限'的错误 很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误,这是XMLHTTP组件的限制-安全起见 禁止访问非同域的网 ...
- 什么是ajax跨域问题,如何解决ajax跨域问题
<如何解决ajax跨域问题>由会员分享,可在线阅读,更多相关<如何解决ajax跨域问题(5页珍藏版)>请在人人文库网上搜索. 1.如何解决ajax跨域问题 由于此前很少写前端的 ...
- Ajax向后端发送PUT请求的两种方法
文章目录 一.将POST请求修改为PUT请求 二.直接发送PUT请求 一.将POST请求修改为PUT请求 通过HiddenHttpMethodFilter过滤器将POST请求修改为PUT请求 需要传入 ...
- 解决GitHub下载资源慢的问题(两种方法)
解决GitHub下载资源慢的问题 最近需要使用GitHub下载一个比较大的资源,在以前一直用GitHub下载开源资源,速度一直都是很慢的,但是由于这次文件比较大,使用GitHub进行下载,速度只 ...
- jquery发送put请求_通过 Ajax 发送 PUT、DELETE 请求的两种实现方式
一.普通请求方法发送 PUT 请求 1. 如果不用 ajax 发送 PUT,我们可以通过设置一个隐藏域设置 _method 的值,如下: 2. 控制层: @RequestMapping(value=& ...
- thinkphp开启子域名无法正常访问_解决TP6报错“当前访问路由未定义或不匹配”...
如果是报路由错误,则说明启用了路由控制,那么所有被访问的页面都需要配置路由,否则将无法访问. 例如: 在浏览器中运行http://hml.tp6.com/admin/getlog 报错:当前访问路由未 ...
- php 不允许外部访问,[日常] 解决mysql不允许外部访问
1.在端口已经开放的情况下,ubuntu mysql 3306允许远程访问 vim /etc/mysql/mysql.conf.d/mysqld.cnf 注释#bind-address = 127.0 ...
- 【51拓展】KeilC51访问RAM、ROM指定地址内存的两种方法(指针访问+绝对地址访问)
文章目录 1 指针访问方法 1.1 关键词及解释 1.2 代码及调试 1.3 51单片机数据在内存中的存储模式 2 绝对地址访问方法 2.1 绝对宏 2.2 关键词`_at_` 1 指针访问方法 1. ...
最新文章
- 实现账号在一端登入_跟我学spring security 基于数据库实现一个基本的登入登出...
- sql server 作业收缩数据库
- 稳健估计/M估计/最小二乘法
- CVPR2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
- 用计算机怎么计算税率,一般纳税人税率计算器,一般纳税人税率如何计算?
- Obsidian关系图谱如何让节点可以手动拖动
- matlab 线性拟合polyfit_Matlab 线性拟合 非线性拟合_matlab非线性拟合函数
- ieeetran_IEEEtran BibTex样式
- 法国电子与计算机信息工程学校排名,法国工程学院的十大排名情况
- 基于pam实现的批量执行命令工具-Cyberark
- Python之路----文件操作
- 大数据高级开发工程师——Spark学习笔记(6)
- 合肥计算机专业大学排名23,计算机专业大学排名
- npm无法加载文件,无法下载依赖包
- python supper菱形继承
- 新能源汽车行业研究报告
- STM32内存管理方法
- C语言——leetcode69——X的平方根
- 【Simulink教程案例17】基于simulink的伪码序列相关峰检测仿真——将matlab数据导入到Simulink中作为信号源
- java雪人程序_java的几种引用类型