近些天留意了一下网站的源码,发现很神奇的只有前台的表单提交,那他的回调函数是怎么执行的那! 研究了一下才豁然开朗!

这个方法最优的点是 它屏蔽了以往的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方法的一种实现相关推荐

  1. python第三方包安装方法(两种方法)

    具体有以下两种方法: 第一种方法(不使用pip或者easy_install): Step1:在网上找到的需要的包,下载下来.eg. rsa-3.1.4.tar.gz Step2:解压缩该文件. Ste ...

  2. 在Spring3中,配置DataSource的方法有五种

    在Spring3中,配置DataSource的方法有五种. 第一种:beans.xml Xml代码 <bean id="dataSource" class="org ...

  3. python爬虫详细步骤-Python爬虫的两套解析方法和四种爬虫实现过程

    对于大多数朋友而言,爬虫绝对是学习 python 的最好的起手和入门方式.因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门.本文想针对某一网页对 python 基础 ...

  4. python封装方法有几种_python之--------封装

    一.封装: 补充封装: 封装: 体现在两点:1.数据的封装(将数据封装到对象中) obj= Foo('宝宝',22)2.封装方法和属性,将一类操作封装到一个类中classFoo:def __init_ ...

  5. JAVA中线程同步的方法(7种)汇总

    JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...

  6. 截屏没有了_原来华为手机的截屏方法不止3种,用了这么久,现在才知道新玩法?...

    华为手机有很多种截屏的方法,这些花式截屏方法,能够让不少华为用户玩上一整天,可是小酱却发现,华为手机的截屏方法不止3种,用了这么久,总算让小酱找到截屏的新玩法了. 下面就让小酱来跟大家一起说说,华为手 ...

  7. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要 ...

  8. 创建索引的方法有两种

    创建索引的方法有两种:创建表的同时创建索引,在已有表上创建索引. 方法一:创建表的同时创建索引. 使用这种方法创建索引时,可以一次性地创建一个表的多个索引(例如唯一性索引.普通索引.复合索引等),其语 ...

  9. 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...

    什么是数控编程 数控机床所以能加工出不同形状.不同尺寸和精度的零件,是因为有程编人员为它编制不同的加工程序.所以说数控编程工作是数控机床使用中最重要的一环.它对于产品质量控制有着重要的作用.数控编程技 ...

最新文章

  1. python __builtins__ set类 (60)
  2. 百度二面:一个线程OOM了,其它线程还能运行吗?
  3. 一个普通摄像头就让二次元老婆“活”了过来,网友:求收费
  4. “腾讯看点”打响信息流的全面战争
  5. C语言 满分代码 L1-047 装睡(解题报告)
  6. C——任意一个偶数分解两个素数
  7. 【转】.so兼容32位和64位
  8. 织梦dedecms 相关文档标签(likearticle)实现关联整站文档
  9. 软件开发工作的绩效评估
  10. 数学建模线性规划实例及详细解答(MATLAB代码)
  11. PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
  12. dns解析失败如何处理?
  13. c语言数据文件是,C语言数据文件操作.ppt
  14. java根据提供word模板导出word文档
  15. 时间显示(模拟时钟)
  16. 【强化学习与机器人控制论文 2】基于强化学习的五指灵巧手操作
  17. 1.找到适合你的学习方法
  18. xp计算机怎么共享网络,windows XP下如何实现共享上网的方法
  19. 最近常常干出一些骑着驴找驴的事来
  20. php+840,哈罗CQ火腿社区 - QRP and DIY - IRF840居然可以用在7MHz的功放!? - Powered by phpwind...

热门文章

  1. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  2. eigrp与ospf的综合实验(还是要想想办法才做得出来哦)
  3. mysql中怎样自动生成代码_MySql之自动生成CRUD代码
  4. mysql 插入数据会执行事务吗_在代码中,插入数据到数据库时,如果不使用事务,将会导致速度极慢...
  5. python文件行数运行结果_python统计文件行数
  6. Yii --EClientScript 扩展,css,js文件代码压缩合并加载
  7. oracle job 及存储过程案例
  8. 必读!Java开发人员的十大戒律
  9. 对R语言发展与历史的一个初步认识
  10. 美国国土安全部发布针对高风险铁路基础设施的强制性安全要求