AJAX 跨域访问 — 方法大全

H5移动端上滑加载,带ajax异步请求后台数据,拿来即用 上滑加载,ajax请求后台,获取数据,然后加载到页面,完完整整,拿来即用 立即下载
Case I. Web代理的方式 (on Server A)
 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。
 Case II. on-Demand方式 (on Server A)
MYMSN的门户就用的这种方式,不过 MYMSN中不涉及跨域访问问题。在页面内动态生成新的<script>,将其src属性指向别的网站的网址,这个网址返回的内容必须是合法的Javascript脚本,常用的是JSON消息。此方案存在的缺陷是, script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。不过此方案非常适合聚合类门户使用。
<html>
<head>
<script language="javascript" type="text/javascript">
function loadContent()
{
var s=document.createElement('SCRIPT');
s.src='
document.body.appendChild(s);
}
function setDivContent(v)
{
var dv = document.getElementById("dv");
dv.innerHTML = v; 
}
</script>
</head>
<body>
<div id="dv"></div>
<input type="button" value="Click Me" onclick="loadContent()">
</body>
</html>
其中的www.anotherdomain.com/TestCrossJS.aspx是这样的,
<script language="C#" runat="server">
void Page_Load(object sender, EventArgs e)
{
  string f = Request.QueryString["f"];
  Response.Clear();
  Response.ContentType = "application/x-javascript";
  Response.Write(String.Format(@"
                   {0}('{1}');", 
                   f,
                   DateTime.Now));
  Response.End();
}
</script>
点击“Click Me”按钮,生成一个新的script tag,下载对应的 Javascript 脚本,结束时回调其中的setDivContent(),从而更新网页上一个div的内容。
 Case III. iframe方式 (on Server A)
查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到自己已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确可以了,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种交互被拒绝),因此无法完成对父窗口效果的影响。 
在页面内嵌或动态生成指向别的网站的IFRAME,然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。改变一个网页的anchor hash fragment并不会使浏览器重新装载网页,所以一个网页的状态得以保持,而网页本身则可以通过一个计时器(timer)来察觉自己anchor hash的变化,从而相应改变自己的状态。
 1. http://domain1/TestCross.html:
<html>
<head>
<script language="javascript" type="text/javascript">
var url = "
var oldHash = null;
var timer = null;
function getHash() 
{
var hash = window.location.hash;
if ((hash.length >= 1) && (hash.charAt(0) == '#')) 
{
hash = hash.substring(1);
}
return hash;
}
function sendRequest()
{
var d = document;
var t = d.getElementById('request');
var f = d.getElementById('alienFrame');
f.src = url + "#" + t.value + "<br/>" + new Date();
}
function setDivHtml(v)
{
var d = document;
var dv = d.getElementById('response');
dv.innerHTML = v;
}
function idle()
{
var newHash = getHash();
if (newHash != oldHash)
{
setDivHtml(newHash);
oldHash = newHash;
}
timer = window.setTimeout(idle, 100);
}
function window.onload()
{
timer = window.setTimeout(idle, 100);
}
</script>
</head>
<body>
请求:<input type="text" id="request"> <input type="button" value="发送" onclick="sendRequest()" /><br/>
回复:<div id="response"></div>
<iframe id="alienFrame" src="http://domain2/TestCross.html"></iframe>
</body>
</html>
2. http://domain2/TestCross.html:
<html>
<head>
<script language="javascript" type="text/javascript">
var url = "
var oldHash = null;
var timer = null;
function getHash() 
{
var hash = window.location.hash;
if ((hash.length >= 1) && (hash.charAt(0) == '#')) 
{
hash = hash.substring(1);
}
return hash;
}
function sendRequest()
{
var d = document;
var t = d.getElementById('request');
var f = parent;
//alert(f.document); //试着去掉这个注释,你会得到“Access is denied”
f.location.href = url + "#" + t.value + "<br/>" + new Date();
}
function setDivHtml(v)
{
var d = document;
var dv = d.getElementById('response');
dv.innerHTML = v;
}
function idle()
{
var newHash = getHash();
if (newHash != oldHash)
{
setDivHtml(newHash);
oldHash = newHash;
}
timer = window.setTimeout(idle, 100);
}
function window.onload()
{
timer = window.setTimeout(idle, 100);
}
</script>
</head>
<body>
请求:<input type="text" id="request"> <input type="button" value="发送" onclick="sendRequest()" /><br/>
回复:<div id="response"></div>
</body>
</html>
两个网页基本相同,第一个网页内嵌一个IFRAME,在点击“发送”按钮后,会将文本框里的内容通过hash fragment传给IFRAME。点击IFRAME里的“发送”按钮后,它会将文本框里的内容通过hash fragment传给父窗口。因为是只改动了hash fragment,浏览器不会重新load网页内容,这里使用了一个计时器来检测URL变化,如果变化了,就更新其中一个div的内容 。 
 Case IV. 用户本地转储方式 (local)
IE本身依附于windows平台的特性为我们提供了一种基于iframe,利用内存来“绕行”的方案,即两个window之间可以在客户端通过windows剪贴板的方式进行数据传输,只需要在接受数据的一方设置Interval进行轮询,获得结果后清除Interval即可。FF的平台独立性决定了它不支持剪贴板这种方式,而以往版本的FF中存在的插件漏洞又被fixed了,所以FF无法通过内存来完成暗渡陈仓。而由于文件操作FF 也没有提供支持(无法通过Cookie跨域完成数据传递),致使这种技巧性的方式只能在IE中使用。
 Case V: (其实还是在服务端A用iframe解决了与服务器B通信的问题)
要解决的问题:发生在用户提交网页URL(还包括Tag, Notes等)给Bookmark服务器时。 
关于URL的提交至少可以有三种方式: 
  
1.       登陆Bookmark服务器的提交页面,将要收藏的URL通过该页面提交给服务器。 
2.       安装浏览器插件,通过插件将URL提交给服务器。 
3.       从Bookmark服务器动态加载javascript小工具到当前页面,通过它来完成提交工作。
     第一种方式开发起来最简单,但对用户来讲比较麻烦,每次都需要先登陆Bookmark服务器才能完成提交;第二种方式我并不熟悉插件开发,而且用户也不喜欢太多的插件堆满自己的浏览器;第三种方式开发难度小,又避免了每次登陆服务器的麻烦,所以最终采用它。第三种方式中动态加载的javascript小工具除了需要生成UI供用户填写信息(URL,tag,notes等),当用户点击提交的时候,还要完成与服务器通信的功能。
       跨域访问,简单来说就是A网站的javascript代码试图访问B网站,包括提交内容和获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。写过跨域访问ajax的朋友相信都遇到过被告知“没有权限”的情况。通过XMLHttp来发送数据给Bookmark服务器的尝试失败了。于是,看到网上的一些资料,我又开始尝试用javascript小工具在用户网页动态创建一个隐藏的iframe, iframe的src指向服务器的一个servlet,试图通过调用iframe中提供的javascript来完成与服务器的通信。但不幸的是,用户网页中的javascript代码访问iframe也被浏览器归为跨域访问(特指iframe的src指向其它网站的情形),尝试再次失败。 
 最终,在一篇文章中看到,与iframe不同,如果A网站从B网站加载javascript,A网站可以自由的访问该javascript的内容,并不会被浏览器认为是跨域访问。模仿刚才iframe的思路,当用户点击提交时,可以动态创建一个javascript对象,该对象的src指向Bookmark服务器的一个servlet,注意:URL、Tag、Notes、User、Password等信息被作为src URL参数传给服务器。请看下面的代码: 
var url = "http://localhost:8080/Deeryard/BookmarkServlet?" + 
           "url=" + url_source + "&" + "title=" + title + "&" + 
"tag=" + tag + "&" + "notes=" + notes + "&" + "user=" + user+ "&" + "password=" + password; 
  
url = encodeURI(url); 
    
//Submit to server with a trick 
var js_obj = document.createElement("script"); 
js_obj.type = "text/javascript"; 
js_obj.setAttribute("src", url); 
    
//Get response from server by appending it to document 
document.body.appendChild(js_obj);
 上面例子中,js_obj.setArrribute()将信息作为src的URL参数提交给了Bookmark servlet。那么用户又如何取得服务器的响应信息呢?答案就是最末一行代码,servlet的输出必须是javascript代码,它可以调用用户网页上的其他javascript函数,以及操作dom对象。下面的servlet代码生成了一个javascript函数调用: 
out.write("onServerResponse(INADEQUATE_INFORMATION);");
document.body.appendChild(js_obj)执行后onServerResponse(INADEQUATE_INFORMATION)就会得到执行,使客户网页响应服务器结果。这样一个完整的通信过程就完成了。
CaseVI:Tomcat + PHP + HTML(含JS)(on Server A)
服务器A上已经装好了Tomcat, 我们写一个test.html(含JS),再写一个PHP文件(由其来完成跨域通信要求)。
基于H5+js+ajax+java的个人空间的实现 个人空间的开发,包括前台和后台两部分,前台采用H5+JavaScript+ajax编写,后台使用Java编写(没有使用框架),代码比较简洁,界面因为时间限制没有美化太多,不过用来练手js+ajax和后台的交互 立即下载

相关推荐

VHDL按键消抖(状态机版本)

检测下降沿:设置一个和,分别代表之前的之前和之前的信号状态,若两个信号key_in_d2=1,key_in_d1=0,他俩的not key_in_d2 and key_in_d1为1,则说明下降沿产生,把它设置为标志位key_flag。延时计数:50MHz的板子每次计数需要20ns,而抖动时间大约为5-10ms。所以取7ms,作为延时时间。可以看见当检测到下降沿时,开始计数计数计满再次检测,若为低电平则为按下按键,否则为抖动。通过检测下降沿来临,延时计数再次检测,如果为低电平则为按键按下。

qq_69639216的博客 1084

H5中ajax()方法发送网络数据请求

一、定义和用法 ajax() 方法通过 HTTP 请求加载远程数据。 $.ajax() 返回其创建的 XMLHttpRequest 对象。 语法 jQuery.ajax([settings]) 参数 参数 描述 setting 可选。用于配置 Ajax 请求的键值对集合。可以通过 $.ajaxSetup() 设置任何选项的默认值。 async Boolean类型。默认值为true。所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。同步请求将锁住浏览器,用户其它操

仁化居之安 5154

玄机-Linux权限维持-后门

玄机-Linux权限维持-后门

m0_46439803的博客 764

ajax跨域方法

为什么80%的码农都做不了架构师?>>> ...

weixin_34008933的博客 720

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

Nginx源码安装和基础配置

Nginx简介 nginx: 世界第二大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。 代理服务器: 正向:squid 反向: squid:最古老的代理服务器 LVS: 优点: 1.抗负载能力强、是工作在网络4层之上仅作分发之用 2.配置性比较低,这是一个缺点也是一个优点,简单不易出错 3.工作稳定,抗负载能力很强,有完整的双机热备方案

hjyhjy0的博客 500

HTML5前端入门教程:Ajax 异步请求技术

AJAX的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。✦ajax不是新的编程语言,而是一种使用现有标准的新方法。ajax是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。✦ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。✦ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少...

weixin_33898233的博客 1329

车辆贷款违约预测挑战赛

2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost

平平淡淡,戒急用忍,一生学闭嘴。 3341

HTML5中AJAX超简单实现方法,原生JavaScript中,AJAX的兼容问题

AJAX兼容HTML5学堂:AJAX的实现步骤相对简单,比较麻烦的是需要进行处理AJAX的兼容。那AJAX的兼容包括创建请求和判断服务器加载完成这两部分,还用到了AJAX的状态码和HTTP状态码,实现AJAX兼容,具体我们一起来看看。创建AJAX请求兼容var xhr = new XMLHttpRequest();// 非IEvar xhr = new ActiveXObject("Msxml2....

weixin_39784460的博客 319

TSMC40nmLP版图实战:从Design Rule解读到Cadence高效布局布线

本文详细解析了TSMC40nmLP工艺的版图设计实战,从Design Rule解读到Cadence高效布局布线技巧。重点介绍了40nm工艺中的关键设计规则,如最小线宽、间距规则和深N阱规则,并分享了Cadence Virtuoso中的高效工作流和射频模块设计技巧,帮助工程师提升版图设计效率和质量。

weixin_29250403的博客 378

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入探讨了SAP CO模块中KKA2和CJ88结果分析码在项目收入成本匹配中的高阶应用。通过真实案例解析,详细介绍了这两种分析码在分阶段收入确认和终验法项目中的配置技巧与实战经验,帮助财务人员高效解决复杂业务场景下的财务数据处理难题。

weixin_29230773的博客 168

h5客户端服务端ajax,发送ajax请求,前端后台都报错。如何解决

在前端发送$.ajax请求,请求方式为post。字数少的情况下可以成功处理。现在内容比较大,前端后台同时报错。前端:Failed to load resource: the server responded with a status of 400 (Bad 这里是请求的URL Request)后台java:十二月 14, 2015 11:25:05 上午 org.apache.coyote.ht...

weixin_31001069的博客 424

【华为OD机试真题 2025C卷新题】855、识文断句 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷新题】855、识文断句 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为

KJ.JK 1851

AJAX 跨域访问 — 示例代码方法大全

Case I. Web代理的方式 (on Server A) 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。

瞧字不识 3855

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Ajax跨域访问方法大全

Case I. Web代理的方式 (on Server A)即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。 Cas

小北的家 1884

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ajax跨域访问-方法大全

Case I. Web代理的方式 (on Server A)即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。 Case II

swj316111626的专栏 422

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【收藏】AJAX 跨域访问 — 方法大全

Case I. Web代理的方式 (on Server A)    即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。    Case II. on-Demand方式 (on Server A)    MYMSN

232
上一篇: 金正康健公司面试题
下一篇: apache2.2 虚拟主机配置
HackProgramer
博客等级 码龄12年 255粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值