ajaxsubmit方法的一种实现
近些天留意了一下网站的源码,发现很神奇的只有前台的表单提交,那他的回调函数是怎么执行的那! 研究了一下才豁然开朗!
这个方法最优的点是 它屏蔽了以往的web安全方面做出的跨域访问,也就是这样封装的方法可以做到完全的跨域ajax提交表单 如同jasonp协议
function AjaxSubmit(action, formID, data, callback) {
var frm = document.getElementById(formID); 获取当前from对象
frm.method = "post"; post提交
frm.encoding = "multipart/form-data"; 编码为传输文件
frm.action = action; 提交时候的地址
var iframeID = formID + "_AjaxIFrame"; 拼接潜入from内的IframeID
frm.target = iframeID;
var childnode = document.getElementById(iframeID);
var ifrm;
if (ifrm != undefined && ifrm != null) {
frm.removeChild(childnode); 确保文档流中Iframe的唯一性
}
//-----------------------
var isIE = navigator.appName.indexOf("Mic") != -1; 判断是不是IE
ifrm = document.createElement("iframe"); 创建潜入的Iframe
ifrm.id = iframeID; 初始化当前的Iframe
ifrm.name = iframeID;
ifrm.style.display = "none";
ifrm.target = "_parent"; 指定嵌套的
frm.appendChild(ifrm); 添加
if (isIE) {
if (document.frames) {
window.frames[iframeID.toString()].name = iframeID;
}
}
var call = document.getElementById("callback");
if (!call) {
call = document.createElement("input"); 创建存储返回函数的标签
}
call.name = "callback";
call.id = "callback";
call.value = callback;
call.type = "hidden";
frm.appendChild(call); 添加该标签到当前表单中
//---------------------------------
for (var name in data) { 判断当前参数在页面中是否有相应的input标签
var input = document.getElementById(name);
if (!input) {
input = document.createElement("input");
}
input.name = name;
input.id = name;
input.value = data[name];
input.type = "hidden";
frm.appendChild(input);
}
frm.submit(); 提交当前表单到指定的后台
}
调用:
页面中有一个from1
Functions Sub(){
AjaxSubmit("Ajax/Test.aspx", "form1", {}, function (data) {
parent._call(data);
});
};
function _call(a) {
alter(a);
}
AjaxAddAddress.aspx 文件中处理:
private void WriteForm(string str, HttpContext context)
{
string method = context.Request["callback"];
string isJson = context.Request["isJson"];
string hs = "<script> void " + method + " ('" + str + "');</script>";返回该回调函数到页面并且执行该方法
context.Response.Write(hs);
context.Response.Flush();
context.Response.End(); 结束当前请求
}
原来是后台直接返回了前台回调的函数,并且是以执行匿名函数的方法,返回到了动态创建的Iframe中 。
转载于:https://www.cnblogs.com/One-dream-man/archive/2013/04/11/3015044.html
ajaxsubmit方法的一种实现相关推荐
- python第三方包安装方法(两种方法)
具体有以下两种方法: 第一种方法(不使用pip或者easy_install): Step1:在网上找到的需要的包,下载下来.eg. rsa-3.1.4.tar.gz Step2:解压缩该文件. Ste ...
- 在Spring3中,配置DataSource的方法有五种
在Spring3中,配置DataSource的方法有五种. 第一种:beans.xml Xml代码 <bean id="dataSource" class="org ...
- python爬虫详细步骤-Python爬虫的两套解析方法和四种爬虫实现过程
对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式.因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门.本文想针对某一网页对 python 基础 ...
- python封装方法有几种_python之--------封装
一.封装: 补充封装: 封装: 体现在两点:1.数据的封装(将数据封装到对象中) obj= Foo('宝宝',22)2.封装方法和属性,将一类操作封装到一个类中classFoo:def __init_ ...
- JAVA中线程同步的方法(7种)汇总
JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...
- 截屏没有了_原来华为手机的截屏方法不止3种,用了这么久,现在才知道新玩法?...
华为手机有很多种截屏的方法,这些花式截屏方法,能够让不少华为用户玩上一整天,可是小酱却发现,华为手机的截屏方法不止3种,用了这么久,总算让小酱找到截屏的新玩法了. 下面就让小酱来跟大家一起说说,华为手 ...
- 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...
- 创建索引的方法有两种
创建索引的方法有两种:创建表的同时创建索引,在已有表上创建索引. 方法一:创建表的同时创建索引. 使用这种方法创建索引时,可以一次性地创建一个表的多个索引(例如唯一性索引.普通索引.复合索引等),其语 ...
- 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...
什么是数控编程 数控机床所以能加工出不同形状.不同尺寸和精度的零件,是因为有程编人员为它编制不同的加工程序.所以说数控编程工作是数控机床使用中最重要的一环.它对于产品质量控制有着重要的作用.数控编程技 ...
最新文章
- python __builtins__ set类 (60)
- 百度二面:一个线程OOM了,其它线程还能运行吗?
- 一个普通摄像头就让二次元老婆“活”了过来,网友:求收费
- “腾讯看点”打响信息流的全面战争
- C语言 满分代码 L1-047 装睡(解题报告)
- C——任意一个偶数分解两个素数
- 【转】.so兼容32位和64位
- 织梦dedecms 相关文档标签(likearticle)实现关联整站文档
- 软件开发工作的绩效评估
- 数学建模线性规划实例及详细解答(MATLAB代码)
- PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
- dns解析失败如何处理?
- c语言数据文件是,C语言数据文件操作.ppt
- java根据提供word模板导出word文档
- 时间显示(模拟时钟)
- 【强化学习与机器人控制论文 2】基于强化学习的五指灵巧手操作
- 1.找到适合你的学习方法
- xp计算机怎么共享网络,windows XP下如何实现共享上网的方法
- 最近常常干出一些骑着驴找驴的事来
- php+840,哈罗CQ火腿社区 - QRP and DIY - IRF840居然可以用在7MHz的功放!? - Powered by phpwind...
热门文章
- 从有限状态机(FSM)到行为树(Behavior Tree)(1)
- eigrp与ospf的综合实验(还是要想想办法才做得出来哦)
- mysql中怎样自动生成代码_MySql之自动生成CRUD代码
- mysql 插入数据会执行事务吗_在代码中,插入数据到数据库时,如果不使用事务,将会导致速度极慢...
- python文件行数运行结果_python统计文件行数
- Yii --EClientScript 扩展,css,js文件代码压缩合并加载
- oracle job 及存储过程案例
- 必读!Java开发人员的十大戒律
- 对R语言发展与历史的一个初步认识
- 美国国土安全部发布针对高风险铁路基础设施的强制性安全要求