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高度的设置. 由于子页面内容不确定,页面高度也不确定.于是开始网上的各种搜索,一般有两种:一 ...
随机推荐
- QT美化界面的文章(真的很美)
http://www.hookr.cn/tag/qt http://blog.csdn.net/yiyaaixuexi/article/category/758470 http://www.qtcn. ...
- RR 和RC隔离问题
Sesssion 1: mysql> select @@tx_isolation; +-----------------+ | @@tx_isolation | +--------------- ...
- Filter plugins ? mutate:
filter { grok { match => [ "message" , "\s*%{IPORHOST:clientip}\s+\-\s+\-\s+\[%{HT ...
- Spark SQL Table Join(Python)
示例 Spark SQL注册“临时表”执行“Join”(Inner Join.Left Outer Join.Right Outer Join.Full Outer Join) 代码 fr ...
- 【动态规划】XMU 1030 苦恼的月下老人
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1030 题目大意: 给定两个字符串的长度和内容,求最长公共子序列. 题目思路: [动态规 ...
- C++: Command Line Processing
Save this code here for studying and using it. Surce code is here. CmdLine.h File #pragma once #incl ...
- E - QS Network - zoj 1586(简单)
题意:在一个叫做QS的星系,他们使用一些特殊的通讯方式,两个人之间通讯需要使用一个网络适配器,但是一个网络适配器只能跟一个人联系,所有它连接几个人就需要及格适配器,而且每个人都有一些不同的偏好,喜欢的 ...
- VC —— 笔记汇总
导读 本文仅用于记录在个人在使用VC++过程中的遇到一些的问题和相关概念. 目录 开发环境 实践记录 MFC相关 windows编程相关 1.开发环境 1.Visual C++ 官方网站 主要内容:V ...
- packets
packets 时间限制(普通/Java):1000MS/10000MS 运行内存限制:65536KByte 总提交: 27 测试通过: 14 描述 A factor ...
- Android Configuration change引发的问题及解决方法
之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什 ...