一、表单提交到了哪里?

  这似乎是个无知的问题,我们都知道表单提交到服务器,java,php,asp等服务器,然后由服务器去读。那么之后呢,服务器总要返回点什么吧,要么返回 一个xml或json数据,要么返回一个页面,要么返回一个页面片段,但是返回到哪里了,这些结果在哪里展示?其实这就是常常被忽略的一个问题,尤其是 ajax用多了,觉得无刷新是理所当然的。在默认情况下,在什么页面提交的,就会将返回的数据(json或页面或页面片段)给这个页面。这里的页面指一个 框架,带有<html></html>结构的html页。

  这样一来,当在A页面提交了一个表单,服务器返回了 一个信息,表示成功了,此时,返回的数据会给A页面,于是,A页面就"刷新"了一次。2005年,出现了异步刷新ajax。这样就可以“局部刷新”了,向 服务器提交数据时,不用通过表单了,可以通过浏览器对象来提交,服务器返回数据到该浏览器对象,这样便可以实现“局部刷新”了。

但是ajax有个致命问题,不能提交文件(后面有提到)。怎么办?

二、文件还得用表单来提交

为了克服ajax不能提交文件的问题,我们又想起了表单。当表单的enctype=multipart/form-data时,就可以上传文件了。可是这样又需要整个页面刷新,问题来了,两个难以同时满足。方法总是有的。于是出现了通过设置表单的target=xxxxIframe的方法。这样意味着表单提交到一个无关的页面,服务器返回时也返回到这个页 面,再在这个无关的页面进行js操作,改变需要更新的页面区域。而整个表单提交过程中,无关页面都是隐藏的,是个幕后推手。这就是 target=xxxxIframe的作用。

三、iframe实现面页无刷新提交表单

  iframe与无刷新有悠久的关系。在ajax出现之前,无刷新是通过iframe来实现的。而在ajax里面又不能异步提交文件(低版本浏览器,高版本浏览器可以通过二进制转换实现文件的异步提交)iframe实现无刷新的原理就是在A页面的表单提交数据到服务器,并且指定target属性为B页面,服务器返回内容到B页面,然后在B页面中调用JavaScript程序,来刷新A页面,完成一次请求。如果在此过程中,B为A页面的一个iframe页面,而且一直不显示,则对用户来说,就是一个无刷新。

这种无刷新比ajax要麻烦,但是同样意义非凡。在上传文件时,ajax是无法提交的,此时iframe似乎成了不二选择。但是有一个要求,就是AB页面同域。因为在整个过程中,会在B页面来调用A页面的js对象的方法或函数,就必须保证两个页面同域。否则操作非法。这种无刷新在网上随处可见,淘宝上很多。

iframe实现面页无刷新提交表单的更多相关文章

  1. HTML无刷新提交表单

    通常对于无刷新提交表单,我们都是运用ajax实现的.前段时间跟着老大了解到另一种无刷新提交表单的方法,是利用iframe框架实现的.现在整理出来分享给大家. 第一种: (html页面) <!DO ...

  2. 使用iframe实现页面无刷新提交表单

    iframe提交表单其实比ajax要方便一些,当然ajax也有ajax的好处,只是ajax编码处理有时有些麻烦,虽然经过转码是可以解决中文问题,但如果直接使用iframe不存这些问题了,下面来看看. ...

  3. Ajax无刷新提交表单和显示

    ajax无刷新表单提交:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  4. 不使用ajax,无刷新提交表单

    <form action="form_action.asp" method="get" onsubmit"check_form()" ...

  5. js无刷新提交表单

    $("#form1").attr("target", "frameFile"); $("#form1").submit( ...

  6. Jquery Ajax自定义无刷新提交表单Form

    Jquery的$.ajax方法可以实现ajax调用,要设置url,post,参数等. 如果要提交现有Form需要写很多代码,何不直接将Form的提交直接转移到ajax中呢. 以前的处理方法 如Form ...

  7. 无刷新提交表单(非Ajax实现)

    HTML代码: <iframe id="fra" name="frm" style="display: none;"></ ...

  8. ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单

    有时候,不得不考虑到以下场景问题: 数据库表字段会频繁更改扩展,而流行的重业务的js框架过于依赖json数据接口,导致的问题是,数据库表更改 -> 数据接口更改 -> 前段框架逻辑更改.. ...

  9. 简单方法实现无刷新提交Form表单

    前几天遇到一个前端的问题.我希望提交表单后页面不跳转且不刷新当前页面,然而查了很多方法都没有解决. 由于Form 是提交后一定刷新页面的,所以我们可以用一个折中的办法.我们给Form 指定一个ifra ...

随机推荐

  1. 中文Win7下成功安装calabash-android步骤

    Calabash-android是支持android的UI自动化测试框架,网上看见很多同学说,安装calabash比较费劲,特别是Windows下安装,也没有一个详细的安装手册可供参考.正好,今天在W ...

  2. 利用python进行折线图,直方图和饼图的绘制

    我用10个国家某年的GDP来绘图,数据如下: labels   = ['USA', 'China', 'India', 'Japan', 'Germany', 'Russia', 'Brazil', ...

  3. mysql日期格式说明符

  4. 【Hadoop代码笔记】目录

    整理09年时候做的Hadoop的代码笔记. 开始. [Hadoop代码笔记]Hadoop作业提交之客户端作业提交 [Hadoop代码笔记]通过JobClient对Jobtracker的调用看详细了解H ...

  5. python basic programs

  6. python 递归函数

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: f ...

  7. C#中让窗体自动靠边隐藏

    1: private void Yincangtimer_Tick(object sender, EventArgs e)//窗体隐藏事件 2: { 3: int a = Control.MouseP ...

  8. 【UML】——为什么要使用UML

    以前一提到UML,就想到了复杂的流程图.很敬佩哪些想想就能画出整个系统的UML图的人,因为他们头脑中有整个软件架构的蓝图,这样在编写实现的时候,就会知道哪个地方改怎么做,哪个地方如何扩展. 而想成为架 ...

  9. 使用教程sqlite

    访问地址: http://www.runoob.com/sqlite/sqlite-where-clause.html

  10. cocos2d-x Animation

    转自:http://codingnow.cn/cocos2d-x/810.html 这一篇来学习怎么使用cocos2d-x引擎播放帧动画,就是把一帧一帧的图片像电影那样显示出来.1. 首先来了解一下相 ...