做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;
}