javascript 不用ajax 用 iframe 子域名下做到ajax post数据
最近在一个项目中遇到了ajax跨域的问题,情况如下。有三个域名分别是 a.xx.com b.xx.com c.xx.com 这三个域名都会用用ajax post方式相互读取数据。文笔不好, 不写了妈蛋。自己去看
//a.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body> <script type="text/javascript" charset="utf-8">
var Ajax = {
idf : "STONE",
frm:null,
ifm:null,
attribute:{
url:null,
type:"post",
data:null,
success:'Ajax.defaultFunction',
beforeSend:null,
jsonp: "callbackparam"
},
//跨域
init:function(){
//创建iframe元素
this.ifm = this.createDOM("iframe",{
name:"iframe"+this.idf,
id:"iframe"+this.idf,
style:"display:none",
width:1,
height:1
});
//创建form元素
this.frm = this.createDOM("form",{
action:this.attribute.url,
method:this.attribute.type,
id:"FORM"+this.idf,
name:"FORM"+this.idf,
target:"iframe"+this.idf
});
document.body.appendChild(this.frm);
document.body.appendChild(this.ifm);
//回调 callbackparam
this.frm.appendChild( this.createDOM("input",{
type:'hidden',
name:this.attribute.jsonp,
value:this.attribute.success
}) );
//参数 input
this.initInput(); this.frm.submit();
//alert(1);
},
//参数
initInput:function(data , inputname){ //判断initIuput是否是第一次
if(typeof data != "object"){
data = this.attribute.data;
}
for(i in data){
var iname = inputname ? inputname + "["+i+"]" : i; if(typeof data[i] == "object"){
this.initInput(data[i], iname);
}else{
this.frm.appendChild( this.createDOM("input",{
type:'hidden',
name:iname,
value:data[i]
}) );
}
} }, //创建DOM
createDOM:function(Element , data){
var e = document.createElement(Element);
for(i in data){
e.setAttribute(i,data[i]);
}
return e;
},
//默认返回处理函数
defaultFunction:function(){
console.log("不错!\n可以去搞基!");
},
//清除残留
del:function(){
//document.body.removeAttribute(Ajax.frm);
//console.log(this);
//提交后的回调
},
//合并对象
extend:function(o,n,override){
for(var p in n){
if(n.hasOwnProperty(p) && (!o.hasOwnProperty(p) || override)){
o[p]=n[p];
}
}
},
call:function(option){
//赋值
this.extend(this.attribute , option , true);
//提交 this.init(); this.ifm.onload = this.del;
} }
//使用
//如果是跨域请记得把 document.domain 设成一样
document.domain = "xx.com";
Ajax.call({
url:'iframe.html',
type:'post',
data:{ddd:"a",a:{b:2,c:{l:0}}}
});
</script>
</body>
</html>
iframe.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript" charset="utf-8">
document.domain = "xx.com";
parent.Ajax.defaultFunction()
</script>
</body>
</html>
现在只可以在子域名下跳跳,哪位大神有兴趣可以改成无限制跨域
javascript 不用ajax 用 iframe 子域名下做到ajax post数据的更多相关文章
- 《JavaScript》高级程序设计第21章:Ajax和Comet,jsonp
一.创建XMLHttpRequest对象 二.XHR的用法 五.跨域资源共享 六.其他跨域技术七.安全七.安全 1. 图像Ping 2. JSONP(JSON with padding,填充式JSON ...
- div中加入iframe,可以实现Ajax的功能
div中加入iframe,可以实现Ajax的功能,如果查询的时候,比如说城市的选择,用Ajax去实现, 在.net 可以考虑用UpdatePanel,但是点击了查询刷新表格(表格需要重新刷新加载,非纯 ...
- JavaScript学习总结【12】、JS AJAX应用
1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...
- 第二百七十二节,Tornado框架-iframe标签框架伪造ajax
Tornado框架-iframe标签框架伪造ajax html <!DOCTYPE html> <html> <head lang="en"> ...
- javascript AJAX简单原理及什么是ajax
AJAX简单原理供初学者理解 AJAX的原理: Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其 ...
- 使用document.domain和iframe实现站内AJAX跨域
站内AJAX跨域可以通过document.domain和iframe实现,比如www.css88.com.js.css88.com.css88.com这3个域名其实是3个不同的域,很多时候www.cs ...
- 使用ajax与iframe嵌套实现页面局部刷新
使用ajax与iframe嵌套实现页面局部刷新.该javascript代码仅供参考,需按自己需要修改.1. [代码]javascript代码 function cj_start(depname,gr ...
- Ajax加载子域跨站cookie丢失的问题.
我们有两个网站一个是main.xxx.cn 一个是 preveiw.xxx.cn main.xxx.cn 页面需要加载preview.xxx.cn的内容. 项目里面出现了两种的加载preview.xx ...
- 使用ajax代替iframe
相信大多数程序员都跟iframe打过交道,iframe简单,好用.在我用的过程中比较苦逼的是关于iframe高度的设置. 由于子页面内容不确定,页面高度也不确定.于是开始网上的各种搜索,一般有两种:一 ...
随机推荐
- 常用SNS开源系统比较
常用SNS开源系统比较 这 几天看了很多关于SNS(社交网络服务) 的东西..得到了不少启发..目前的IDEA是..可以在学校弄一个试试..主打的东西不能和现有的SNS冲突(如校内网).利用本地优势. ...
- COJ 0017 20604悲剧文本
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=17 20604悲剧文本 难度级别:B: 运行时间限制:1000ms: 运行空 ...
- 2015第30周三Spring常用工具类
文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...
- SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)
说明:该文档翻译/整理于Hive官方文档https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authori ...
- loadrunner11 录制脚步不成功,在录制概要出现“No Events were detected”,浮动窗口总是显示“0 Events”,解决办法
打开ie浏览器,菜单栏上的工具----Internet选项---高级选项卡,去掉勾选“启用第三方浏览器扩展”,重启ie即可,重新录制脚本就可以成功. 刚刚开始以为自己解决不了这个问题,还想怎么办呢?一 ...
- HDOJ的题目分类
模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 10 ...
- CSU 1559 订外卖
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82842#problem/E 订外卖 解题思路:定义两个数组,a[]表示满A,b ...
- 2013=12=2 bitree
#include "stdio.h" #include "stdlib.h" #define OVERFLOW -1 #define ERROR -1 #def ...
- O - Marriage Match IV - hdu 3416(最短路+最大流)
题目大意:在城市A的男孩想去城市B的女孩,不过他去城市B必须走最短路,并且走过的路不可以再走,问他最多能看这个女孩多少次. 分析:因为这个男孩直走最短路,所以我们必须求出来所有最短路径上的路,怎么 ...
- 修改上一篇文章的node.js代码,支持默认页及支持中文
服务端 app.js var app = require('http').createServer(handler) var io = require('socket.io')(app); var f ...