Ajax应用之表单提交

本文详细介绍了使用Ajax进行表单提交的过程,包括手动获取表单数据、数据封装及异步请求对象的创建与回调处理。此外,还特别讨论了如何处理不同类型表单元素的数据获取,如select和checkbox等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ajax中提交表单,实际上是手动获取表单的数据,然后对数据进行封装,再通过异步请求对象提交到服务端的过程。

 

Ajax异步请求对象的创建(可参考http://blog.youkuaiyun.com/lixianlin/archive/2009/12/14/5001923.aspx),需要考虑一下浏览器兼容性,IE和非IE浏览器下创建方式不同。返回结果的处理,其实也就是异步请求对象的回调函数的构建。这两步操作只要明白了异步请求对象的工作原理,实现起来都不难,难的是如何获取表单的数据并对数据进行封装。

 

获取表单数据的思路:对表单中的所有元素(当然是能够提交数据的元素,不能提交数据的元素无须考虑)进行遍历,获取每个元素的name属性和value值,这其中就需要考虑怎样获取value值,比如象select元素,并不是所有option的value值都有效,只有被选中的option才是有效的,这个不用多说,因为select元素的作用就是那样的。

 

表单数据封装:换种方法说也说是编码,凡提到数据传输,必然会提到编码,因为只有编码和解码采用同一种机制(或者说协议),才能保证传输数据的正确性。正常情况下的表单提交,如GET方式,默认是采用“application/x-www-form-urlencoded“编码方式对数据封装的,得到的结果是以&连接的键值对的形式,其中的键和值需要进行编码处理,结果形如:key1=val1&key2=val2&key3=val3。可以用encodeURIComponent方法对键和值进行编码,也可以自定义编码方式,只要让服务器操作方便就行。

 

需要注意的事,对于file文件上传类型,是无法直接通过Ajax来处理的,因为在设计JS的时候,出于安全性考虑,网页中的JS被设计成不能访问文件的。网上所说的Ajax上传文件(严格意义上这种说法是不正确的),都是通过其他方式来上传文件的。

 

提供一个简单遍历表单数据的方法:

function GetRequestString(frm) {
	frm = $(frm);
	var e;
	var arr = [];
	for (var i = 0; i < frm.length; ++i) {
		e = frm[i];
		if (!e.name || e.disabled) {
			continue;
		}
		if (e.type == 'select-one') {
			arr.push(encodeURIComponent(e.name) + '=' + encodeURIComponent(e.options[e.selectedIndex].value));
		} else if (e.type == 'select-multiple') {
			for (var j = 0; j < e.length; ++j) {
				if (e.options[j].selected) {
					arr.push(encodeURIComponent(e.name) + '=' + encodeURIComponent(e.options[j].value));
				}
			}
		} else if (e.type == 'checkbox' || e.type == 'radio') {
			if (e.checked) {
				arr.push(encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value));
			}
		} else if (typeof(e.value) != 'undefined') {
			arr.push(encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value));
		}
	}
	return arr.join('&');
}

参数为表单对象,或表单的id。

 

代码中用到的$()函数的定义:

function $(s) {
	if (typeof(s) == "string") {
		return document.getElementById(s);
	} else if (typeof(s) == "object") {
		return s;
	} else {
		return document;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值