如何实现js跨域调用
来源:互联网 发布:鼓机效果器软件 编辑:程序博客网 时间:2024/06/05 14:18
最近需要提供一个接口给外部门使用,没遇到过降域的问题。比较通用的方法,可以使用jsonp方式进行调用。下面有一篇文章讲得不错,把原理讲得很清晰,基本原理:就是利用js的src标签,src可以越过同源策略的限制,巧妙实现跨域访问。
http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html
另外:这里要指出的一点就是,使用jsonp方式,无法使用post方式提交表单,根本原因就是因为他是通过script方式去加载的。
=================================================================================================
给其他部门写了个cgi,早上把服务端进行了下改造,想使用jsonp方式进行跨域,结果发现jasonp方式无法使用post方式访问,又花了两个小时,改造成了使用iframe + document降域的方式进行访问。
具体方案如下:
欲提供给外部调用的cgi地址为:http://aa.bb.com/hello,外的域名为http://cc.bb.com/nimei.html
可以通过在同域下面,新建一个页面,作为代理页面,通过代理页面来绕过跨域。
1、新建一个页面:http://aa.bb.com/agent.html
在该页面下:
<html>
<body>
<script>
document.domain="bb.com" //这里把域降成bb.com
function callback()
{
/*这里可以随心所欲调用aa.bb.com下的cgi了
这里特别注意:前提必须相对的协议,该页面是http的,你不能去调用https协议的cgi,否则访问不了
*/
}
</script>
</body>
</html>
2、外部调用,使用iframe的src属性,去加载1中的代理页面,通过这个属性来绕过js同源访问策略。
http://cc.bb.com/nimei.html中,添加如下html代码片段:
<html>
<head>
</head>
<script>
document.domain="bb.com"; //这里把域降到基础域
function callChild()
{
myFrame.window.callback(); //这里便可以调用代理页面提供的接口函数了,实现跨域调用
}
</script>
<iframe name="myFrame" src="http://aa.bb.com/agent.html" style="display:none"></iframe>
</html>
总结:实施过程当时,因为把协议没对上,所以总是跨域访问不成功。之前看过不少理论上的东西,但做起来,又是另一种滋味。
还是那句老话:纸上得来终觉浅 绝知此事要躬行!!!
- 如何实现js跨域调用
- 如何实现js调用java函数
- asp.net WebService实现跨域js调用功能实现
- js如何实现跨域访问
- underscore.js如何实现全局变量和链式调用
- MVC+JQuery实现跨域Jsonp调用Js
- MVC+JQuery实现跨域Jsonp调用Js
- java 如何调用js
- js跨域调用
- js的链式调用-如何实现类似jquery的链式调用
- 系统调用如何实现
- C++如何调用JS函数
- js如何调用ocx控件
- DIV如何JS调用广告!!!
- Js如何调用本地应用程序
- Js 跨域调用问题
- Js 跨域调用问题
- js跨域调用报表
- 【SAP UI】ALV动态列内表实现
- 水晶报表 自定义打印纸张
- Oracle性能调整的三把利剑--ASH,AWR,ADDM
- 日期加天数得到新的日期
- 网站优化需要养成的习惯
- 如何实现js跨域调用
- 翻译:Linux的电源管理架构
- 水晶报表使用自定义纸张 发布解决方案 .
- hadoop namenode启动过程详细剖析及瓶颈分析
- MySQL存储过程详解 mysql 存储过程
- 关于目前阶段大数据的一点看法
- YUV与RGB相互转换的公式
- 求两个数的最大公约数
- [转载]数学的三大核心领域