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()进行转换
相关推荐
JSONP是一种古老的跨域方式,通过动态创建`<script>`标签,其src属性指向提供服务的API。API会返回一个JavaScript函数调用,带有数据作为参数,这样就能绕过同源策略。在ASP.NET Web中,可以创建一个处理JSONP请求的...
总结来说,解决Ajax跨域访问问题有多种途径,选择哪种方式取决于具体需求、服务器支持以及安全性考虑。理解并掌握这些方法,能帮助开发者更好地应对实际项目中的跨域挑战。在开发过程中,确保遵循最佳实践,既能保障...
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下更新部分网页的技术。然而,由于浏览器的同源策略限制,AJAX请求通常只能发送到与当前页面同一源的服务器,即协议、域名和...
本文将详细介绍五种实现Ajax跨域访问的方法。 #### 一、使用JSONP(JSON with Padding) JSONP是一种常用的跨域数据获取方式,其原理是利用`<script>`标签没有跨域限制的特点来实现跨域请求。请求时,在URL中添加...
通过上述分析和示例代码,我们可以看到在Java环境中解决JSP中的AJAX跨域访问问题并不复杂,关键在于理解跨域访问的原理以及正确配置CORS或实现JSONP。无论是通过设置响应头来启用CORS,还是通过包装数据来实现JSONP...
总结来说,jQuery通过JSONP和CORS两种方式实现了Ajax的跨域访问。开发者可以根据实际需求选择合适的方法,同时注意安全性,确保数据交互的顺利进行。在具体实践中,可以参考提供的博客链接(已给出但无法点击,请...
可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的...
JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...
个人学习时编写的代码,该案例用于演示Ajax的跨域访问问题。!!!补充说明:导入工程时需要选择导入maven工程!上传仅为学习交流,也为自己下载方便!水平有限不喜勿喷。在README.txt中有对项目的详细说明!
在Web开发中,跨域(Cross-Origin)是一个常见的问题,特别是在使用Ajax进行异步数据交互时。本示例“demo跨域ajax_DEMO_ajax跨域”着重解决C#后端与JavaScript前端之间的跨域限制。这里我们将深入探讨什么是跨域、...
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许页面在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。然而,由于浏览器的安全策略,AJAX请求通常受到同源...
标题"Ext.Ajax.request跨域"指出我们将探讨如何使用ExtJS库中的Ajax模块进行跨域请求。Ext.Ajax.request是ExtJS提供的一种发起Ajax请求的方式,它允许开发者向服务器发送异步HTTP请求。然而,由于浏览器的同源策略...
ajax跨域
在现代Web应用开发中,数据共享和跨域访问是常见的需求。Spring Boot作为一个轻量级的框架,提供了方便快捷的方式来实现这些功能。本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决...
总结来说,Ajax跨域访问可以通过JSONP和CORS两种方式实现。JSONP简单但适用场景有限,而CORS则提供了更全面的跨域解决方案。在实际项目中,应根据需求和安全性考虑选择适合的跨域策略。对于现代Web应用,推荐使用...
**Ajax跨域详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术允许我们实现页面的...通过分析这些文件,开发者可以更好地理解和实践Ajax跨域的解决方案,确保在实际项目中能够顺利地进行跨域数据交互。
标题中的“在Firefox中通过AJAX跨域访问Web资源”是指使用Asynchronous JavaScript and XML (AJAX)技术在Mozilla Firefox浏览器中实现跨域数据请求。跨域是由于浏览器的同源策略(Same-origin policy)限制,它阻止...
解决AJAX跨域问题有多种策略,主要分为以下几种: 1. **JSONP(JSON with Padding)**: - JSONP是一种规避同源策略的技术,它利用`<script>`标签不受同源策略限制的特点。通过在请求URL中添加一个`callback`参数,...