`
dcj3sjt126com
  • 浏览: 1876876 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ajax跨域的实现

阅读更多

 

ajax跨域调用有两种方式,一种是iframe的方式,通过设置document.domain来实现,一种则是通过设置jsonp来实现。

 

一 、ajax 跨域调用的问题

本地建了三个站点,并设置了host文件模拟跨子域和跨全域

hello.com

blog.hello.com

world.com

 

hello.com下页面使用jquery的$.get调用blog.hello.com页面

 

跨域请求,IE 7和8下报 access denied错误
IE 6.0 则弹出 this page is accessing information that is not under its control. this poses a security risk.do you want to continue?提示框

firefox 没报错,但是不会做出请求

 

二、ajax跨域实现方法

 

1、跨子域实现ajax


要求:实现hello.com的页面 异步请求 blog.hello.com下的页面
实现方法:借助iframe,通过设置iframe的src属性,嵌入blog.hello.com下的一个页面,比如AjaxProxy.jsp,然后由该页面去请求Ajax
              AjaxProxy请求完毕后,通过parent对象把返回的数据回传给hello.com的主页面。因此,真正的异步请求还是发生在blog.hello.com的域名下

注意:通过这种方法实现的跨子域ajax请求,需要在hello.com的请求页面以及AjaxProxy.jsp页面中设置同样的域名,也就是document.domain = "coolkissbh.com";

注意:关于设置domain的问题,如果是跨全域,使用上面方法时候,firefox下会提示
        Illegal document.domain value" code: "1009的错误,

因此跨全域只能使用第二种方法处理返回的数据:

AjaxProxy.jsp将ajax返回的数据保存到一个全局变量中,hello.com通过setInterval定时去判断iframe的页面是否加载完成,如果加载完成,则获取AjaxProxy.jsp的全局变量值。然后再做其它处理。

     这里有个问题:我原来是打算在AjaxProxy.jsp的ajax请求完成后,调用parent的方法,同时将数据返回,但是在IE下,点击第一次时候
就会出现“permission denied”的错误,再次点击就正常了。在firefox下就没有问题,不知道是什么原因。

2,跨全域实现ajax
要求:实现hello.com的页面异步请求world.com下的页面
实现方法:上面提到跨全域不能通过设置domain方法来实现。但是可以使用script标签来实现,通过设置script标签的src属性为world.com域名
下的一个页面,同时将callback函数传到该页面中,例如:

Js代码   收藏代码
  1. RequestAjax_CrossSite = function() {  
  2.             varobj = $("#crossSitePage");  
  3.             obj.attr("src""http://coolkiss.com/CrossSite.jsp?callback=handleData3");  
  4.         }   
  5.         handleData3 = function(data) {  
  6.             $("#ResponseData").html(data);  
  7.         }  

 

CrossSite.jsp返回一个字符串,将返回的数据回传给callback,执行回调函数,实现ajax,例如:

Js代码   收藏代码
  1. Response.Clear();  
  2. Response.Write(string.Format("{0}('{1}')", Request["callback"], responseData));  
  3. Response.End();  

 

注意:这种方法同样可以用于处理跨子域ajax的问题,但是就无法像jquery那样获取ajax调用的各个状态

 

3、通过jquery的jsonp实现跨域ajax,其实原理跟第二种方法是一样的,支持跨全域和子域

jquery 1.2 后添加了对跨域ajax的调用,也就是$.getJSON 函数
调用方法如下:

 下面是hello.com下的页面 

Js代码   收藏代码
  1. //使用jsonp实现跨全域  
  2. RequestAjax_JSONP = function() {  
  3.      var obj = $("#crossSitePage");  
  4.      $.getJSON("http://coolkiss.com/CrossSite.jsp?callback=?&t=" + Math.random(), function(data) {  
  5.            //alert(data);  
  6.            $("#ResponseData").html(data.content);  
  7.         });  
  8.      }  

 

world.com后台处理代码,将一个json对象传递给callback

Js代码   收藏代码
  1. public partial class CrossSite : System.Web.UI.Page  
  2. {  
  3.     protected void Page_Load(object sender, EventArgs e)  
  4.     {  
  5.         if (!IsPostBack)  
  6.         {  
  7.             LoadData_JSONP();  
  8.         }  
  9.     }  
  10.   
  11.     protected void LoadData_JSONP()  
  12.     {  
  13.         string responseData = "{content:\"hello world from world.com\"}";  
  14.         if (Request["callback"] != null && !string.IsNullOrEmpty(Request["callback"]))  
  15.         {  
  16.             Response.Clear();  
  17.             Response.Write(string.Format("{0}({1})", Request["callback"], responseData));  
  18.             Response.End();  
  19.         }  
  20.     }  
  21. }  

 

callback=?  其中?会自动替换为function(data)函数。

 
分享到:
评论

相关推荐

    Ajax跨域实现代码(后台jsp).docx

    Ajax跨域实现主要涉及到Web开发中的安全性限制,即同源策略。同源策略阻止了一个源自一个域名的JavaScript访问另一个域名的资源,这是为了防止恶意网站读取或篡改其他网站的数据。然而,在某些情况下,如前后端分离...

    AJAX跨域实现的三种方式

    AJAX跨域是指在使用XMLHttpRequest (XHR) 进行AJAX请求时,由于浏览器的同源策略限制,导致不同源之间的通信受到阻碍。同源策略是浏览器为了保护用户安全而实施的一项机制,它禁止了一个源的文档或脚本去获取另一个...

    Ajax跨域实现代码(后台jsp)

    AJAX跨域实现是网络开发中常见的问题,主要涉及Web浏览器中的同源策略,该策略限制了不同域之间的请求交互。解决这一问题的方法多种多样,包括但不限于使用代理服务器、iframe、JSONP以及最新标准XMLHttpRequest ...

    ajax跨域解决办法

    6. **Domain属性(仅限子域)**:在cookies中设置`domain`属性可以实现跨子域共享,但这仅限于同一主域下的子域名之间,对AJAX跨域请求帮助有限。 在实际应用中,开发者通常根据项目需求和服务器环境选择合适的跨域...

    Ajax跨域传输参数

    可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的...

    Javascript跨域和Ajax跨域解决方案

    JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...

    demo跨域ajax_DEMO_ajax跨域_

    以上就是C#和Ajax跨域通信的基本原理和实现方法。在实际应用中,还需考虑安全性,谨慎设置允许跨域的源,以及是否允许携带Cookie等认证信息。通过理解并正确实施这些策略,你可以确保C#服务器与任何合法源的前端应用...

    怎样实现Ajax 跨域访问

    ### 如何实现Ajax跨域访问 在Web开发中,由于同源策略的限制,JavaScript只能对同源的页面进行操作,不能对不同源的页面进行请求。然而,在实际的应用场景中,经常会出现需要向不同域名下的服务器发起请求的情况。...

    Ajax跨域访问解决方案

    **Ajax跨域访问解决方案** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,提升用户体验。然而,由于浏览器的同源策略限制,Ajax请求只能向同源(协议、域名和端口相同)...

    Ajax跨域详解与代码

    **Ajax跨域详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术允许我们实现页面的异步更新,无需刷新整个页面即可获取并展示新数据。然而,由于浏览器的安全策略,同一源策略(Same-Origin Policy)...

    ajax跨域调用wcf实例

    以下是实现AJAX跨域调用WCF服务的具体步骤和相关知识点: 1. **开启WCF服务的跨域支持**:在WCF服务的配置文件(通常是ServiceName.svc.cs或IServiceName.cs)中,需要启用跨域资源共享(CORS)。这可以通过添加`...

    Spring Boot Redis Session 共享(Ajax 跨域)

    本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决Ajax跨域问题。 首先,我们需要理解Spring Boot中的Session管理。默认情况下,Spring Boot使用内存中的HttpSession来存储用户会话...

    利用JQuery jsonp实现Ajax跨域请求json数据

    本篇文章将详细讲解如何利用jQuery的jsonp方法实现Ajax跨域请求,以及如何在服务器端使用.Net的*.handler和WebService来返回JSON数据。 首先,理解JSONP的基本原理。JSONP是一种非官方的协议,通过动态创建`...

    ajax跨域实例

    ajax跨域实例 Ajax 跨域操作是指在不同的域名、协议或端口之间进行 Ajax 请求的操作。由于浏览器的同源策略限制,跨域操作需要在前端和服务端指定共同规则,以便实现安全的数据交换。在本文中,我们将讨论两个 ...

    JQury实现Ajax跨域访问

    **jQuery实现Ajax跨域访问** 在Web开发中,由于同源策略的限制,JavaScript通常只能对同一域名下的资源进行操作。然而,有时我们需要从不同源获取数据,这就是跨域访问的需求。jQuery通过Ajax提供了跨域请求的能力...

    解决ajax跨域问题

    为了解决AJAX跨域问题,开发者可以采用以下几种策略: 1. JSONP(JSON with Padding) JSONP是一种绕过同源策略的方法,它利用了`<script>`标签不受同源策略限制的特点。JSONP的工作原理是服务器提供一个可被调用的...

    解决ajax跨域请求问题

    本文将深入探讨如何解决Ajax跨域请求的问题。 首先,理解“同源策略”是解决问题的关键。同源策略是浏览器为了保障网络安全而设定的一种机制,它禁止了一个源的文档或脚本访问另一个源的属性,这里的“源”指的是...

    Jquery跨域Ajax请求测试

    本示例"Jquery跨域Ajax请求测试"将详细讲解如何利用jQuery实现这一功能。 首先,了解同源策略是理解跨域问题的关键。同源策略是浏览器为了保障用户安全而设定的一项机制,它规定了只有来自同一协议、同一域名和同一...

    cors技术解决ajax跨域

    **CORS技术详解:解决AJAX跨域问题** 在Web开发中,由于浏览器的同源策略限制,AJAX请求只能向同一源(协议+域名+端口)发送,这在跨域请求时会遇到障碍。为了解决这个问题,CORS(Cross-Origin Resource Sharing,...

Global site tag (gtag.js) - Google Analytics