`
zha_zi
  • 浏览: 590156 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ajax跨域访问和产生的原因

 
阅读更多
document.domain = "css88.com";

var createAjaxIframe={
	appIframe: function(iframeId, iframeSrc){
		var iframe = document.createElement("iframe");
		iframe.src = iframeSrc// "http://css88.com/demo/domain/iframe.html";
		iframe.id = iframeId;
		iframe.style.display = "none";
		if (iframe.attachEvent) {
			iframe.attachEvent("onload", function(){
				createAjaxIframe.domainAjax(iframeId);
			});
		}else {
			iframe.onload = function(){
				createAjaxIframe.domainAjax(iframeId);
			};
		}
		document.body.appendChild(iframe);
	},
	domainAjax: function(iframeId){
		var iframeDom = document.getElementById(iframeId).contentWindow.$;
		iframeDom.getJSON("http://css88.com/demo/iframe-domain/city.html", function(date){
			var cityOption = "";
			for (i = 0; i < date.length; i++) {
				cityOption += date[i].c_name + "--" + date[i].c_value + "<br />"
			}
			$("#test").html(cityOption);
		});
	}
	
};
createAjaxIframe.appIframe("iframe","http://css88.com/demo/iframe-domain/iframe.html");

 

 

 使用<script>标签解决ajax跨域:

 

这个方法是利用<script>标签中的src来query一个aspx获得response,因为<script>标签的src属性不存在跨域的问题。

举个例子来让大家看得更清楚一点吧:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Ajax跨域问题</title>
    <script type="text/javascript" src="" id="getAspx">
    </script>
    <script type="text/javascript">
        function get(url) {
            var obj = document.getElementById("getAspx");
            obj.src = url;
            (obj.readStatus == 200)
            {
                alert(responseVal);//如果成功,会弹出Dylan
            }
        }
        function query() {
            get(getDemo.aspx);
        }
    </script>
</head>
<body>
<input type="button" value="Ajax跨域测试" onclick="query();"/>
</body>
</html>
 

getDemo.aspx后台代码:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace LearnJS
{
    public partial class getDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("var responseVal='Dylan'");
        }
    }
}

 这个方法又叫做ajaj或者ajax without xmlHttprequest,把x换成了j,是因为使用了<script>标签而没有用到xml和xmlHttprequest的缘故。这种方法似乎有点“另类”,哈哈。

 

 

jquery解决ajax跨域问题:

 

<html>
<head>
<title>JQuery学习</title>
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var oBtnTest = $("#btnTest");
    oBtnTest.click(function(){
        oBtnTest.disabled = true;    
        var oResult = $("#result");
        oResult.html("loading").css("color","red");
        jQuery.getScript("http://www.csdn.com/test/js.txt", 
        function(){            
            oResult.html("name:" + Dylan.name + "<br/>email:" + Dylan.email).css("color","black");            
            oBtnTest.disabled = false;            
        });         
    });    
});    
</script>
</head>
<body>
<button id="btnTest">BtnTest</button>
<div id="result"></div>
</body>
</html>
 

远程服务器端js.txt中的内容为:
var Dylan= {name:"Dylan",email:Dylan@163.com}

 

笔者感觉这种方式更加简洁。呵呵。当然,读者可以根据实际情况,任意选择实现方式。

 

为什么会产生跨域的问题主要原因是由于js在设计时的同源策略

 

javascript 同源策略:

同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。这个策略可以追溯到 Netscape Navigator 2.0。

Mozilla 认为两个页面拥有相同的源,如果它们的协议、端口(如果指明了的话)和主机名都相同。下表给出了相对http://store.company.com/dir/page.html同源检测的结果:

 

URL 结果 原因
http://store.company.com/dir2/other.html 成功
http://store.company.com/dir/inner/another.html 成功
https://store.company.com/secure.html 失败 协议不同
http://store.company.com:81/dir/etc.html 失败 端口不同
http://news.company.com/dir/other.html 失败 主机名不同

 

在同源策略中有一个例外,脚本可以设置 document.domain 的值为当前域的一个后缀,比如域store.company.com的后缀可以是company.com。如果这样做的话,短的域将作为后续同源检测的依据。例如,假设在 http://store.company.com/dir/other.html 中的一个脚本执行了下列语句:

document.domain = "company.com";

这条语句执行之后,页面将会成功地通过对 http://company.com/dir/page.html 的同源检测。而同理,company.com 不能设置 document.domain 为 othercompany.com.

分享到:
评论

相关推荐

    demo跨域ajax_DEMO_ajax跨域_

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

    Jquery跨域Ajax请求测试

    然而,现代Web应用中,前端和后端往往部署在不同的服务器上,这就产生了跨域需求。 jQuery的$.ajax()方法是实现跨域Ajax请求的核心。$.ajax()可以接受一系列参数,其中关键的两个是`url`(指定要请求的远程服务地址...

    AJAX(XMLHttpRequest)进行跨域请求方法详解

    随着Web2.0和SNS的兴起,Web应用对跨域访问的需求也越来越多,但是,在脚本中进行跨域请求是受安全性限制的,Web开发人员迫切需要提供一种更安全、方便的跨域请求方式来融合(Mashup)自己的Web应用。 为了解决跨域...

    ajax跨域访问遇到的问题及解决方案

    总的来说,解决Ajax跨域访问的方法多种多样,选择哪种取决于具体的应用场景和兼容性需求。在现代开发中,CORS通常是最推荐的解决方案,因为它提供了更安全、可控的跨域访问机制。然而,对于旧版浏览器或特定需求,...

    用代理避免ajax跨域请求(手机验证码)

    标题“用代理避免ajax跨域请求(手机验证码)”指出了解决这个问题的一种策略,即利用代理服务器来规避浏览器的同源策略限制。下面我们将深入探讨这个主题。 首先,我们了解什么是跨域请求。在Web开发中,由于...

    ajax解决跨域的全面方案.docx

    然而,随着Web应用的发展,跨域通信的需求日益增加,为此,出现了多种解决Ajax跨域的方法。 1. **什么是Ajax跨域** Ajax跨域是由于浏览器的同源策略限制,使得JavaScript无法通过Ajax请求获取或发送不同源的数据。...

    JS跨域访问解决方案总结[参照].pdf

    但是随着 Web2.0 和 SNS 的兴起,Web 应用对跨域访问的需求也越来越多,为此 W3C 工作组中的 Web Applications Working Group 发布了一个 Cross-Origin Resource Sharing(跨域资源共享规范)推荐规范来解决跨域请求...

    ajax跨域请求js拒绝访问的解决方法

    AJAX跨域请求是指当一个网页从一个域名下的服务器请求另外一个域名下的资源时,由于浏览器的同源策略,可能会被拒绝访问,产生跨域问题。同源策略是浏览器的一个安全机制,它要求网页的脚本只能访问和操作与该脚本...

    js解决跨域访问问题

    本文将详细介绍跨域访问产生的原因,并给出具体的解决方案及其示例代码。 #### 二、同源策略 同源策略(Same-origin policy)是Web安全的一项基本政策,它的主要目的是保护用户的数据安全,防止恶意网站通过脚本...

    支持Ajax跨域访问ASP.NET Web Api 2(Cors)的示例教程

    ###Ajax跨域访问和*** Web API 2(Cors) 在了解如何配置CORS之前,我们需要先了解几个关键点: 1. **同源策略**:浏览器安全策略的一部分,只有相同协议、域名和端口的请求才被视为同源。跨域请求通常不会被执行,...

    深入浅析Nginx实现AJAX跨域请求问题

    AJAX跨域请求问题是在开发Web应用时经常遇到的一个问题。所谓跨域请求,指的是浏览器出于安全考虑,限制了前端JavaScript代码发起的AJAX请求只能访问与发起请求的页面同一个域下的资源。当需要从一个域名的资源请求...

    如何快速解决JS或Jquery ajax异步跨域的问题

    首先,要理解ajax异步跨域问题产生的根本原因。由于浏览器的同源策略,当请求的URL不符合同源条件时,浏览器会拦截返回的响应。即使后端服务器成功处理请求并返回数据,这些数据也不会被前端JavaScript代码获取。 #...

    跨域页面访问问题解决.doc

    知识点一:跨域页面访问的定义和原因 跨域页面访问是指在多个系统集成的情况下,主系统以 iframe 或 frameset 的方式将其他子系统的页面嵌进来,从而导致浏览器阻止 iframe 或 frameset 的 cookie,进而使 SESSION ...

    解决ajax跨域请求数据cookie丢失问题

    总之,解决Ajax跨域请求数据时cookie丢失的问题通常涉及到CORS设置、客户端和服务器端的配合以及对各种跨域解决方案的理解和应用。正确配置后,前端和后端可以无缝协作,实现跨域请求时携带用户认证信息。在实际开发...

    jquery中ajax跨域方法实例分析

    在jQuery中,可以使用`$.getJSON()`和`$.ajax()`两个方法来实现JSONP跨域请求。首先,通过`$.getJSON()`方法实现JSONP的示例代码如下: ```javascript var url = "***"; $.getJSON(url, { "age": 21, "name": ...

    疯狂ajax讲义源码5(2).rar

    5. **跨域问题**:由于同源策略限制,Ajax请求通常只能访问同源的资源,但可以通过JSONP或CORS等方式实现跨域请求。 6. **错误处理**:处理网络异常、服务器错误等情况,确保应用的健壮性。 7. **Ajax库和框架**:...

    AJAX_In_Action

    9. **Progressive Enhancement**:为了确保对非JavaScript用户的兼容性和可访问性,开发Ajax应用时应遵循渐进增强原则,即首先提供基本功能,然后通过JavaScript添加增强效果。 10. **移动设备上的Ajax**:随着移动...

    JavaScript同源策略和跨域访问实例详解

    然而,随着Web应用的复杂性和交互性增强,有时开发者需要在不同的源之间进行数据交换,这就产生了跨域访问的需求。对于像Ajax这样的异步请求,同源策略会成为阻碍。在JavaScript中,XMLHttpRequest对象默认遵循同源...

Global site tag (gtag.js) - Google Analytics