jquery中form的序列化

本文详细介绍了jQuery如何通过serialize和serializeArray方法收集和序列化表单数据,以及如何将这些数据用于AJAX请求。同时,还探讨了在后端(如Servlet)中如何解析这些序列化的数据。

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

jquery可以对form进行数据的收集,然后序列化,它的ajax的data也被默认使用了序列化。

它使用的序列化是 url-encode的格式,看起来是 a=1&b=2

它提供三个函数:

param: 序列化函数,URI-encode

序列化form有两个:

serialize: param( serializeArray() )

serializeArray:负责收集form的数据,即处理 form.elements ,然后返回的是一个数组,[{name:a,value:a},{name:b,value:2}],如果checkbox是多个那么返回的也是多个。不收集file文件。可以用jquery.form来收集(他有$.fn.formToArray),然后把它创建FormData对象。post上传。

如何解析,servlet里的HttpUtils

 public static Hashtable<String,String[]> parseQueryString(String s) {

        String valArray[] = null;

        if (s == null) {
            throw new IllegalArgumentException();
        }
        Hashtable<String,String[]> ht = new Hashtable<>();
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(s, "&");
        while (st.hasMoreTokens()) {
            String pair = st.nextToken();
            int pos = pair.indexOf('=');
            if (pos == -1) {
                // XXX
                // should give more detail about the illegal argument
                throw new IllegalArgumentException();
            }
            String key = parseName(pair.substring(0, pos), sb);
            String val = parseName(pair.substring(pos+1, pair.length()), sb);
            if (ht.containsKey(key)) {
                String oldVals[] = ht.get(key);
                valArray = Arrays.copyOf(oldVals, oldVals.length + 1);
                valArray[oldVals.length] = val;
            } else {
                valArray = new String[1];
                valArray[0] = val;
            }
            ht.put(key, valArray);
        }
        return ht;
    }
	private static String parseName(String s, StringBuilder sb) {
        sb.setLength(0);
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
            case '+':
                sb.append(' ');
                break;
            case '%':
                try {
                    sb.append((char) Integer.parseInt(s.substring(i+1, i+3),
                                                      16));
                    i += 2;
                } catch (NumberFormatException e) {
                    // XXX
                    // need to be more specific about illegal arg
                    throw new IllegalArgumentException();
                } catch (StringIndexOutOfBoundsException e) {
                    String rest  = s.substring(i);
                    sb.append(rest);
                    if (rest.length()==2)
                        i++;
                }

                break;
            default:
                sb.append(c);
                break;
            }
        }
        return sb.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值