解决AJAX表单用POST方式提交Checkbox复选框的问题
用AJAX的POST方式提交表单,函数如下:
- function createXMLHttp()
- {
- var xmlhttp = false;
- try
- {
- xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
- }
- catch (e)
- {
- try
- {
- xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
- }
- catch (E)
- {
- xmlhttp = false;
- }
- }
- if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
- {
- xmlhttp = new XMLHttpRequest();
- }
- return xmlhttp;
- }
- function getRequestBody(oForm)
- {
- var aParams = new Array();
- for (var i=0 ; i < oForm.elements.length; i++)
- {
- var sParam = encodeURIComponent(oForm.elements[i].name);
- sParam += "=";
- sParam += encodeURIComponent(oForm.elements[i].value);
- aParams.push(sParam);
- }
- return aParams.join("&");
- }
- function sendPostRequest()
- {
- var oForm = document.forms[0];
- var sBody = getRequestBody(oForm);
- var xmlhttp = createXMLHttp();
- xmlhttp.open("POST", oForm.action, true);
- xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xmlhttp.onreadystatechange = function()
- {
- if (xmlhttp.readyState == 4)
- {
- if (xmlhttp.status == 200)
- {
- // success
- }
- else
- {
- // failed
- }
- }
- };
- xmlhttp.send(sBody);
- }
一个含有复选框的表单:
- <form id="Reg-form" name="Reg-form" onsubmit="sendPostRequest(); return false;"
- action="submit.php" method="post" encType="multipart/form-data">
- <input type="checkbox" name="os[]" value="1" autocomplete="off">Linux<br>
- <input type="checkbox" name="os[]" value="2" autocomplete="off">Mac OS<br>
- <input type="checkbox" name="os[]" value="3" autocomplete="off">Windows<br>
- <input id="submit" type="submit" value="Submit" name="submit">
- </form>
直接用浏览器提交,服务器端的$_POST['os']只有选中项的值,但用sendPostRequest()提交,不管是否选中选项,$_POST['os']永远包含所有选项的值。
针对这个问题,常见的解决方法是不使用POST方式,而用GET方式来提交表单,比如这篇文章:
http://www.captain.at/howto-ajax-form-post-get.php
既然AJAX总是提交所有选项的值,那就把选项的值默认设为空,当选中的时候再赋值,就能保证服务器端只接收到选中项的值了。
方法是用一个函数来设置选项的值,把选项的值先保存在alt属性中:
- <form id="Reg-form" name="Reg-form" onsubmit="sendPostRequest(); return false;"
- action="submit.php" method=post encType=multipart/form-data>
- <input type="checkbox" name="os[]" alt="1" value="" autocomplete="off" onclick="checkboxValue(this);">Linux<br>
- <input type="checkbox" name="os[]" alt="2" value="" autocomplete="off" onclick="checkboxValue(this);">Mac OS<br>
- <input type="checkbox" name="os[]" alt="3" value="" autocomplete="off" onclick="checkboxValue(this);">Windows<br>
- <input id="submit" type="submit" value="Submit" name="submit">
- </form>
- <script language="JavaScript">
- function checkboxValue(obj)
- {
- if(obj.checked)
- {
- objobj.value = obj.alt;
- }
- else
- {
- obj.value = "";
- }
- }
- </script>
转载于:https://blog.51cto.com/viperii/309459
解决AJAX表单用POST方式提交Checkbox复选框的问题相关推荐
- PHP处理Checkbox复选框表单提交
PHP表单提交页面复选框的名称后要加[],这样在接收页面才能得到正确的结果.表单提交后得到的是一个数组,然后通过访问数组元素得到表单的具体vaule值.得到的checkbox1的值,默认有</b ...
- ajax动态拼接复选框样式,JavaScript 通过Ajax 动态加载CheckBox复选框
废话不多说了,直接给大家贴代码了,具体代码如下所示: //动态加载年份checkbox by dongch 20170830 function GetCompareYearByStationName( ...
- php ajax复选框是否选中的值,jquery-ajax - php+ajax分页时,checkbox复选框选中的问题...
目的:所有的数据实现分页显示,不是查询所有的数据,而是每次取固定的条数.而且在每页选中的数据ID都可以保存,一起提交选中的数据,做相应的操作.比如第一页选中2条,第二页选中3条,提交时是5条,如果返回 ...
- 【PHPWord】如何解决PHPWord的输出checkbox复选框并设置checked已勾选
目录 一.需求 二.基于XML的实现方式 三.兼容性强的实现方式 三.总结 一.需求 对于生成Word文档来说,复选框的勾选状态和非勾选状态的展示是一个非常常见的问题. 需要用到复选框的文档大概有这几 ...
- form表单使用put方式提交
form表单的提交方式只支持GET或者POST,为了实现restful风格,需要使用form表单实现PUT和DELETE方式的提交,对于这种情况,spring提供了过滤器 HiddenHttpMeth ...
- 复选框 在java后台怎么取_前台checkbox复选框提交到后台处理
前台 ${(record.merchantname)!}${(record.description)!} #list> JS function morecheck() { var bb = &q ...
- 判断多个checkbox复选框至少选一个(提交时必须选择一个)
HTML代码: <h2>请选择您的爱好:</h2><form action="" method="post" id="f ...
- css复选框表单,用CSS来美化表单——复选按钮篇
原标题:用CSS来美化表单--复选按钮篇 今天,我们来学习如何利用CSS美化checkbox复选框按钮,过程非常简单,本文主要是提供美化复选框按钮的方法,至于美化到何种程度还需大家自己去举一反三,发挥 ...
- eazy ui 复选框单选_UI备忘单:单选按钮,复选框和其他选择器
eazy ui 复选框单选 重点 (Top highlight) Pick me! Pick me! No, pick me! In today's cheat sheet we will be lo ...
最新文章
- [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
- Qt读取ini配置文件
- C# winfrom打印技术初探
- [hdu5372 Segment Game]树状数组
- 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
- 腾讯广告“虚拟IP”赛题突出重围,入选第七届“互联网+”双创大赛产业命题
- 2021最新Java高频面试题,很适合大厂面试
- 9000多篇投稿,接收率只有15%,今年的AAAI你中了吗?
- eclipse无法弹出控制台
- (9)二进制文件方式部署Kubernetes高可用集群----------部署master节点
- 删除专利模板文件的最后一页(WPS亲测可用)
- mybatisplus代码生成器
- [渝粤教育] 中南大学 分子生物学 参考 资料
- 游戏及相关CG行业知识分享大V全整合
- python批量导入excel中的IP地址查询所在地及运营商
- 「保姆级教学」带你闹清楚JAVA人的TOM猫是啥,再整明白Mac下怎么安装Tomcat
- 华哥倒酒(二分答案)
- 华为开发者选项锁屏已被管理员、加密政策或凭据存储禁用
- 计算机二级必过知识点大全,计算机二级ms-office办公软件必过知识点.doc
- 非常有意思的人体时钟
热门文章
- 017 包扫描器和标记注解
- 初始化JQuery方法与(function(){})(para)匿名方法介绍
- java中的final, finally, finalize的区别
- Google Maps JavaScript API V3 根据地址 加载地图
- hibernate执行sql的顺序问题
- buildroot output子目录
- 微信小程序 - 更改radio和checkbox选中样式
- Maven 项目创建 找不到web.xml
- 自然语言处理----处理原始文本
- [svc]visio绘制模具