[Java教程]WEX5中ajax跨域访问的几种方式

0 2015-07-09 15:00:10

1、使用jsonp方式

使用jsonp访问的话,前端需要把回调函数名传递给后端,后端执行完后也需要把回调函数传回给前端,默认情况下ajax自动生成一个回调函数名,后端可以通过String callback = request.getParameter("callback");  得到这个回调函数名

前端示范代码:1 $.ajax({ 2 "type" : "post", 3 "dataType" : "jsonp", 4 "async" : false, 5 "url" : "http://192.168.0.24:8080/WaterMIS_App/data", 6 "data" : { 7 "action" : "checkAddress", 8 }, 9 "success" : function(xhr) {10 alert("成功!")11 }12 });

后端示范代码:1 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 2 //请求 3 String action = request.getParameter("action"); 4 //回调函数名 5 String callback = request.getParameter("callback"); 6 //控制器部分 7 if("checkAddress".equals(action)){ 8 response.setContentType("text/html;charset=utf-8"); 9 response.getWriter().write(callback+"({});"); 10 }11 }

后端响应必须以functionName(JSON字符串);这样的字符串返回给前端。

改进:

jsonp类型的请求是只能异步的,而且请求失败也不会有任何的提示,因此我的解决办法是使用setTimeout推迟成功回调函数的执行,通过设置flag判断是否已经执行了成功回调而判断是否执行失败代码

前端示范代码改进:1 var flag = 1; //是否已经执行过回调函数 1为初始值 2为执行过 0为响应失败 2 var time = 1000;//时间设置 单位.毫秒 3 $.ajax({ 4 "timeout" : time, 5 "type" : "post", 6 "dataType" : "jsonp", 7 "async" : false, 8 "url" : "http://192.168.0.24:8080/WaterMIS_App/data", 9 "data" : {10 "action" : "checkAddress",11 },12 "success" : function(xhr) {13 flag = 2;14 alert("成功!");15 }16 });17 18 //请求失败 把方法设置为time毫秒之后执行 假如flag不为2 则在时间范围内成功回调没有执行,则认为请求失败19 setTimeout(function() { 20 if (flag!=2) {21 flag = 0;22 alert("失败!");23 }24 }, time+1); 25 26 //请求超时 当时间为time+2 flag还为初始时候的值1 则认为成功回调跟请求失败都没执行,则认为请求超时27 setTimeout(function(xhr) { 28 if (flag==1) {29 alert("超时");30 }31 }, time+2);

2、设置响应头的方式进行跨域请求

通过设置响应头,达到跟普通ajax请求一样的效果

前端示范代码:1 $.ajax({ 2 "type" : "post", 3 "async" : false, 4 "dataType" : "json", 5 "url" : "http://192.168.0.24:8080/WaterMIS_App/data", 6 "data" : { 7 "action" : "checkAddress", 8 }, 9 "complete" : function(xhr) {10 if (xhr.readyState == 4 && xhr.status == 200) {11 alert("成功!");12 } else {13 alert("失败!");14 }15 }16 });

后端代码示范:1 public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 2 //请求 3 String action = request.getParameter("action"); 4 5 //控制器部分 6 if("checkAddress".equals(action)){ 7 response.setContentType("text/html;charset=utf-8"); 8 ((HttpServletResponse)response).addHeader("Access-Control-Allow-Origin", "*"); 9 response.getWriter().write("{}"); 10 }11 }

备注:

第一种方法得到的json数据是自动解析成json对象的,能直接对json对象的操作

第二种方法得到的仅仅只是一个字符串,假如是一个json格式的字符串,可以通过eval()或者JSON.parse()进行转换

本文网址:http://www.shaoqun.com/a/125139.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

ajax

0

wex5 java_[Java教程]WEX5中ajax跨域访问的几种方式相关推荐

  1. AJAX异步请求解决跨域问题的三种方式

    一 什么是跨域 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说We ...

  2. jsonp的原理·jsonp是不是ajax中实现跨域访问的技术

    ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据, 而是返回一段调用某个函数的js代码,在s ...

  3. 在Firefox中通过AJAX跨域访问Web资源

    一.解决在firefox中无法跨域访问的问题 AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息.至于成功接收到响应信息后的操作,就和普通的Web客 ...

  4. java 服务端解决ajax跨域问题

    java 服务端解决ajax跨域问题 参考文章: (1)java 服务端解决ajax跨域问题 (2)https://www.cnblogs.com/fx2008/p/4024971.html (3)h ...

  5. react中 ajax跨域请求

    因为项目需要,目前需要通过react ajax请求,实现请求其它域的登录URL,将用户写入到其它域的cookie中,之后herf连接该网址的其他内容的时候,便可直接跳转到对应内容,无需跳转到登录页面. ...

  6. apache ajax 跨域访问,AJAX跨域访问(从Tomcat8到Apache/Nginx)

    1.在Tomcat的Root目录下放入如下的文件 apache-tomcat-8.0.12X64\webapps\ROOT clientaccesspolicy.xml文件 crossdomain.x ...

  7. jsonp跨域的缺点ajax缺点,浅析JSONP解决Ajax跨域访问问题的思路详解

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问 ...

  8. Ajax跨域访问抱错 原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘

    当Ajax跨域访问,明明已经获取到访问的json数据但是浏览器报错CORS 头缺少 'Access-Control-Allow-Origin' : 解决方式一: 过滤器 package com.xet ...

  9. yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?

    允许跨域访问 CORS ( Cross Origin Resource Sharing,跨域资源共享)机制允许Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在API容器中 ...

  10. ie9以下兼容ajax跨域访问,解决ie9以下浏览器ajax请求报error拒绝访问方案 解决ie9以下浏览器ajax请求报400问题方案

    解决方案如下: 1.ie9以下兼容ajax跨域访问   2.ajax请求开始前添加 jQuery.support.cors = true;  允许跨域 3.ie浏览器设置允许通过域访问数据 并且 ur ...

最新文章

  1. linux 发行版本和 及其与linux内核之间的关系
  2. linux 进程间通信 dbus-glib【实例】详解一(附代码)(d-feet工具使用)
  3. linux编译ace,Linux下编译ACE
  4. Linux 网络编程八(epoll应用--大并发处理)
  5. mysql批量生成修改表和列注释语句
  6. springboot 别名不起作用_springboot之mybatis别名的设置
  7. zabbix服务端远程执行命令
  8. BlackBerry 开发笔记入门 J2ME
  9. 2017-2018-2课表
  10. 刷新按钮_处理数据透视表的隐藏选项(四):固定报表刷新前后的列宽和格式...
  11. 链表(创建,插入,删除和打印输出
  12. Unable to load print control in ReportingService
  13. FinSpy 发布 Mac 和 Linux OS 版本攻击埃及组织机构
  14. java 计数程序_Java JVM——4.程序计数器
  15. php渐变闪动字体代码,33种超好看彩色闪字渐变代码分享
  16. quartus频率计 时钟设置_基于QuartusII的两种数字频率计的设计与比较
  17. 安卓手机设置指定文件夹下的图片、视频不被相册读取到
  18. 河北计算机四六级报名入口,英语四六级考试报名入口
  19. 【BIT云计算大作业】基于Spark的K近邻(KNN)查询以及K-mer计数
  20. 2019 ICPC 徐州 H题 Yuuki and a problem

热门文章

  1. linux内核数据链路层,基于Linux数据链路层的MPI集群通信机制的设计与实现-嵌入式系统-与非网...
  2. python去除列表中的重复元素,简单易理解,超详细解答,步骤分析
  3. java 串行化 序列化_对象串行化 对象序列化
  4. 弹性地基梁板实用计算_3款实用性高的农村别墅,造价低,越看越有韵味
  5. python画图x轴时间间隔_matplotlib绘图-设置横坐标为日期显示范围与间隔
  6. android 常用依赖库
  7. jquery 文本编辑器插件
  8. 转载 侃一侃编译原理的“文法” 作者 :博客网 my笔触
  9. 设置vim默认显示行号
  10. spring framework核心框架体系结构