做Web的时候有时候会使用Js把表单序列化之后发送到服务端去.

Jquery提供了两个函数做这个动作

form表单示例:

<!DOCTYPE html>
<html lang="en">
<head>
		<meta charset="UTF-8">
		<title>Document</title>
		<script type="text/javascript" src="./static/jquery-1.10.2.min.js"></script>
</head>
<body>
		<form  action="" onsubmit="return false;" method="post" id="form">
				<input type="text" name="hel">
				<input type="text" name="age">
				<button id="bt">Hello</button>
		</form>
		<script type="text/javascript">
				$('#bt').click(function(){
						var form = $('#form').serialize();
						$.post('http://z.vilay.com/test.php',{form:form});
				})
		</script>
</body>
</html>

顺便记录个意外的错误:在表单那边如果没有写onsubmit="return false;"会报405 not allowed错误,这是Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误

在看下后台输出的结果:

serializeArray()

Array
(
		[0] => Array
				(
						[name] => hel
						[value] => dfdf
				)

		[1] => Array
				(
						[name] => age
						[value] => dfdf
				)

)

serializeArray() 方法通过序列化表单值来创建对象数组(名称和值)。

serialize()

hel=dfd&age=dfd

serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。

获取到值,后台再自己进行处理.

提供一个PHP格式化serializeArray()发送的数据成原始订单发送数据的方法:

function format_serialize_data($serialize_data)
{
$request = array();
foreach ($serialize_data as $k=>$v) {
    $pos = strpos($v['name'],'[');
    if ($pos){
        $key = substr($v['name'],0,$pos);
        $key_num = substr($v['name'],$pos+1,strpos($v['name'],']')-$pos-1);
        $request[$key][$key_num] = $v['value'];
    } else {
        $request[$v['name']] = $v['value'];
    }
    
}

return $request;
}