开发者社区 问答 正文

ajax 获取表单内容然后传递PHP

我之前一直在用DOM通过js提取表单内容给PHP做处理,其实也就相当于没用form。。
后来form的内容越来越多了,通过一个个getElementById来获取表单内容然后给PHP越来越不现实了
我在想能不能通过form原本的POST方式(或者有别的方式?)直接将表单内容变成数组,然后js获取数组之后在传递给后台PHP,然后PHP在解析数组做处理,这样做ajax?
可能以上描述不是很专业,忘大神谅解,非常感谢

展开
收起
小旋风柴进 2016-03-10 10:09:33 2214 分享 版权
1 条回答
写回答
取消 提交回答
  • 设置表单的target为隐藏iframe的name值,将表单提交到隐藏iframe来模拟ajax无刷新操作,或者倒入jquery框架,调用serialize方法即可将表单序列化为键值对字符串。

    或者自己遍历表单也行

            function serializeForm(f) {//参数f为表单这个DOM对象
                var params = '', tmp;
                for (var i = 0; i < f.elements.length; i++) {
                    if (f.elements[i].name) {
                        switch (f.elements[i].type) {
                            case 'hidden':
                            case 'password':
                            case 'text':
                            case 'textarea':
                            case 'select-one':
                                params += (params == '' ? '' : '&') + f.elements[i].name + '=' + encodeURIComponent(f.elements[i].value); break;
                            case 'select-multiple':
                                tmp = '';
                                for (var p = 0; p < f.elements[i].options.length; p++)
                                    if (f.elements[i].options[p].selected) tmp += (tmp == '' ? '' : ',') + f.elements[i].options[p].value;
                                if (tmp != '') params += (params == '' ? '' : '&') + f.elements[i].name + '=' + encodeURIComponent(tmp); break;
                            case 'radio': case 'checkbox':
                                if (f.elements[i].checked) params += (params == '' ? '' : '&') + f.elements[i].name + '=' + encodeURIComponent(f.elements[i].value); break;
                        }
                    }
                }
                return params;
            }
    2019-07-17 18:56:57
    赞同 展开评论