WEX5中ajax跨域访问的几种方式
1、使用jsonp方式
使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callback = request.getParameter("callback"); 得到这个回调函数名
前端示范代码:
$.ajax({
"type" : "post",
"dataType" : "jsonp",
"async" : false,
"url" : "http://192.168.0.24:8080/WaterMIS_App/data",
"data" : {
"action" : "checkAddress",
},
"success" : function(xhr) {
alert("成功!")
}
});
后端示范代码:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//请求
String action = request.getParameter("action");
//回调函数名
String callback = request.getParameter("callback");
//控制器部分
if("checkAddress".equals(action)){
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(callback+"({});");
}
}
后端响应必须以functionName(JSON字符串);这样的字符串返回给前端。
改进:
jsonp类型的请求是只能异步的,而且请求失败也不会有任何的提示,因此我的解决办法是使用setTimeout推迟成功回调函数的执行,通过设置flag判断是否已经执行了成功回调而判断是否执行失败代码
前端示范代码改进:
var flag = 1; //是否已经执行过回调函数 1为初始值 2为执行过 0为响应失败
var time = 1000;//时间设置 单位.毫秒
$.ajax({
"timeout" : time,
"type" : "post",
"dataType" : "jsonp",
"async" : false,
"url" : "http://192.168.0.24:8080/WaterMIS_App/data",
"data" : {
"action" : "checkAddress",
},
"success" : function(xhr) {
flag = 2;
alert("成功!");
}
}); //请求失败 把方法设置为time毫秒之后执行 假如flag不为2 则在时间范围内成功回调没有执行,则认为请求失败
setTimeout(function() {
if (flag!=2) {
flag = 0;
alert("失败!");
}
}, time+1); //请求超时 当时间为time+2 flag还为初始时候的值1 则认为成功回调跟请求失败都没执行,则认为请求超时
setTimeout(function(xhr) {
if (flag==1) {
alert("超时");
}
}, time+2);
2、设置响应头的方式进行跨域请求
通过设置响应头,达到跟普通ajax请求一样的效果
前端示范代码:
$.ajax({
"type" : "post",
"async" : false,
"dataType" : "json",
"url" : "http://192.168.0.24:8080/WaterMIS_App/data",
"data" : {
"action" : "checkAddress",
},
"complete" : function(xhr) {
if (xhr.readyState == 4 && xhr.status == 200) {
alert("成功!");
} else {
alert("失败!");
}
}
});
后端代码示范:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//请求
String action = request.getParameter("action");
//控制器部分
if("checkAddress".equals(action)){
response.setContentType("text/html;charset=utf-8");
((HttpServletResponse)response).addHeader("Access-Control-Allow-Origin", "*");
response.getWriter().write("{}");
}
}
备注:
第一种方法得到的json数据是自动解析成json对象的,能直接对json对象的操作
第二种方法得到的仅仅只是一个字符串,假如是一个json格式的字符串,可以通过eval()或者JSON.parse()进行转换,另外需要注意响应头再一次请求中只能被设置一次,多次设置会导致出错。最好是在过滤器中进行设置。
WEX5中ajax跨域访问的几种方式的更多相关文章
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- ajax实现跨域访问的两种方式
一.使用jsonp实现跨域请求 在前端开发这中你会发现,所有带src属性的标签都可以跨域访问其他服务器文件.jsonp实现的原理也是如此. 以jsonp的数据类型进行请求时,JQ会动态在页面中添加sc ...
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...
- 【js跨域】js实现跨域访问的几种方式
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...
- 在Firefox中通过AJAX跨域访问Web资源---
一.解决在firefox中无法跨域访问的问题 AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息.至于成功接收到响应信息后的操作,就和普通的Web客 ...
- 浅析JSONP-解决Ajax跨域访问问题
浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现 ...
- ajax跨域访问的解决方案
今天的工作中要访问摄像机内部的一个web站点,这就涉及到jquery的ajax跨域访问的问题.我使用的是jquery1.7的版本,下面总结如下: 问题一:一开始用IE调试,总是返回No Transpo ...
- Ajax跨域访问解决办法
方法1. jsonp实现ajax跨域访问示例 jsp代码: <body> <input type="button" onclick="testJsonp ...
随机推荐
- linux中启动 java -jar 运行程序
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉.以 ...
- CentOS 安装 clang
Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器.源代码发布于BSD协议下.2013年4 月,Clang已经全面支持C++11标准,并开始实现C++ ...
- 深入理解 Object.defineProperty 及实现数据双向绑定
Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...
- Linux常用命令全称
Linux常用命令全称 pwd:print work directory 打印当前目录 显示出当前工作目录的绝对路径 ps: process status(进程状态,任务管理器) 常用参数: ...
- MVC架构在Asp.net中的应用和实现
转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能 ...
- VMware中安装Centos 7
1.点击“文件-新建”,如下图 2.选择"典型".下一步 3.选择”稍后安装操作系统”,下一步. 4.选择要安装的操作系统类型,下一步 5.填写虚拟机名称,设置虚拟机的存放位置,下 ...
- 记一次 OutOfMemoryError: Java heap space 的排错
1.情况概述 公司以前的某报名系统,项目启动后,在经过用户一段时间的使用之后,项目响应便开始变得极其缓慢,最后几乎毫无反应.日志里输出了一些似乎无关痛痒的异常,逐步修复,项目仍然出现这种情况,且 &q ...
- Jmeter+ant+jenkins集成
已有jmeter.*.jmx脚本 一.jmeter+ant 1.下载安装ant(检查是否安装成功) 2.将 JMeter 所在目录下 extras 子目录里的 ant-JMeter-1.1.1.jar ...
- 记一次InputStream引起的乱码
项目上线一周后,正准备看新闻的我突然接到了一个任务.线上突然出现了一条乱码的数据,需要解决这个bug.于是我放下了手中的保温杯,开始解决这个bug.经过一番折腾,发现是有一个同事在处理IO流上写得有点 ...
- git revert 还有这个坑?
最近也是终于开启了代码编写之旅,我只能默默地说一句,写代码的感觉,简直不能再爽! 不过也由于 git 的分支管理蛋疼懵逼很久,所以必须记录以及和大家分享一下本次坑爹的旅行. 写在前面 每个公司相比都有 ...