用AJAX的POST方式提交表单,函数如下:

  1. function createXMLHttp()
  2. {
  3. var xmlhttp = false;
  4. try
  5. {
  6. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  7. }
  8. catch (e)
  9. {
  10. try
  11. {
  12. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13. }
  14. catch (E)
  15. {
  16. xmlhttp = false;
  17. }
  18. }
  19. if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
  20. {
  21. xmlhttp = new XMLHttpRequest();
  22. }
  23. return xmlhttp;
  24. }
  25. function getRequestBody(oForm)
  26. {
  27. var aParams = new Array();
  28. for (var i=0 ; i < oForm.elements.length; i++)
  29. {
  30. var sParam = encodeURIComponent(oForm.elements[i].name);
  31. sParam += "=";
  32. sParam += encodeURIComponent(oForm.elements[i].value);
  33. aParams.push(sParam);
  34. }
  35. return aParams.join("&");
  36. }
  37. function sendPostRequest()
  38. {
  39. var oForm = document.forms[0];
  40. var sBody = getRequestBody(oForm);
  41. var xmlhttp = createXMLHttp();
  42. xmlhttp.open("POST", oForm.action, true);
  43. xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  44. xmlhttp.onreadystatechange = function()
  45. {
  46. if (xmlhttp.readyState == 4)
  47. {
  48. if (xmlhttp.status == 200)
  49. {
  50. // success
  51. }
  52. else
  53. {
  54. // failed
  55. }
  56. }
  57. };
  58. xmlhttp.send(sBody);
  59. }

一个含有复选框的表单:

  1. <form id="Reg-form" name="Reg-form" onsubmit="sendPostRequest(); return false;"
  2. action="submit.php" method="post" encType="multipart/form-data">
  3. <input type="checkbox" name="os[]" value="1" autocomplete="off">Linux<br>
  4. <input type="checkbox" name="os[]" value="2" autocomplete="off">Mac OS<br>
  5. <input type="checkbox" name="os[]" value="3" autocomplete="off">Windows<br>
  6. <input id="submit" type="submit" value="Submit" name="submit">
  7. </form>

直接用浏览器提交,服务器端的$_POST['os']只有选中项的值,但用sendPostRequest()提交,不管是否选中选项,$_POST['os']永远包含所有选项的值。

针对这个问题,常见的解决方法是不使用POST方式,而用GET方式来提交表单,比如这篇文章:
http://www.captain.at/howto-ajax-form-post-get.php

既然AJAX总是提交所有选项的值,那就把选项的值默认设为空,当选中的时候再赋值,就能保证服务器端只接收到选中项的值了。

方法是用一个函数来设置选项的值,把选项的值先保存在alt属性中:

  1. <form id="Reg-form" name="Reg-form" onsubmit="sendPostRequest(); return false;"
  2. action="submit.php" method=post encType=multipart/form-data>
  3. <input type="checkbox" name="os[]" alt="1" value="" autocomplete="off" onclick="checkboxValue(this);">Linux<br>
  4. <input type="checkbox" name="os[]" alt="2" value="" autocomplete="off" onclick="checkboxValue(this);">Mac OS<br>
  5. <input type="checkbox" name="os[]" alt="3" value="" autocomplete="off" onclick="checkboxValue(this);">Windows<br>
  6. <input id="submit" type="submit" value="Submit" name="submit">
  7. </form>
  8. <script language="JavaScript">
  9. function checkboxValue(obj)
  10. {
  11. if(obj.checked)
  12. {
  13. objobj.value = obj.alt;
  14. }
  15. else
  16. {
  17. obj.value = "";
  18. }
  19. }
  20. </script>

转载于:https://blog.51cto.com/viperii/309459

解决AJAX表单用POST方式提交Checkbox复选框的问题相关推荐

  1. PHP处理Checkbox复选框表单提交

    PHP表单提交页面复选框的名称后要加[],这样在接收页面才能得到正确的结果.表单提交后得到的是一个数组,然后通过访问数组元素得到表单的具体vaule值.得到的checkbox1的值,默认有</b ...

  2. ajax动态拼接复选框样式,JavaScript 通过Ajax 动态加载CheckBox复选框

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //动态加载年份checkbox by dongch 20170830 function GetCompareYearByStationName( ...

  3. php ajax复选框是否选中的值,jquery-ajax - php+ajax分页时,checkbox复选框选中的问题...

    目的:所有的数据实现分页显示,不是查询所有的数据,而是每次取固定的条数.而且在每页选中的数据ID都可以保存,一起提交选中的数据,做相应的操作.比如第一页选中2条,第二页选中3条,提交时是5条,如果返回 ...

  4. 【PHPWord】如何解决PHPWord的输出checkbox复选框并设置checked已勾选

    目录 一.需求 二.基于XML的实现方式 三.兼容性强的实现方式 三.总结 一.需求 对于生成Word文档来说,复选框的勾选状态和非勾选状态的展示是一个非常常见的问题. 需要用到复选框的文档大概有这几 ...

  5. form表单使用put方式提交

    form表单的提交方式只支持GET或者POST,为了实现restful风格,需要使用form表单实现PUT和DELETE方式的提交,对于这种情况,spring提供了过滤器 HiddenHttpMeth ...

  6. 复选框 在java后台怎么取_前台checkbox复选框提交到后台处理

    前台 ${(record.merchantname)!}${(record.description)!} #list> JS function morecheck() { var bb = &q ...

  7. 判断多个checkbox复选框至少选一个(提交时必须选择一个)

    HTML代码: <h2>请选择您的爱好:</h2><form action="" method="post" id="f ...

  8. css复选框表单,用CSS来美化表单——复选按钮篇

    原标题:用CSS来美化表单--复选按钮篇 今天,我们来学习如何利用CSS美化checkbox复选框按钮,过程非常简单,本文主要是提供美化复选框按钮的方法,至于美化到何种程度还需大家自己去举一反三,发挥 ...

  9. eazy ui 复选框单选_UI备忘单:单选按钮,复选框和其他选择器

    eazy ui 复选框单选 重点 (Top highlight) Pick me! Pick me! No, pick me! In today's cheat sheet we will be lo ...

最新文章

  1. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
  2. Qt读取ini配置文件
  3. C# winfrom打印技术初探
  4. [hdu5372 Segment Game]树状数组
  5. 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
  6. 腾讯广告“虚拟IP”赛题突出重围,入选第七届“互联网+”双创大赛产业命题
  7. 2021最新Java高频面试题,很适合大厂面试
  8. 9000多篇投稿,接收率只有15%,今年的AAAI你中了吗?
  9. eclipse无法弹出控制台
  10. (9)二进制文件方式部署Kubernetes高可用集群----------部署master节点
  11. 删除专利模板文件的最后一页(WPS亲测可用)
  12. mybatisplus代码生成器
  13. [渝粤教育] 中南大学 分子生物学 参考 资料
  14. 游戏及相关CG行业知识分享大V全整合
  15. python批量导入excel中的IP地址查询所在地及运营商
  16. 「保姆级教学」带你闹清楚JAVA人的TOM猫是啥,再整明白Mac下怎么安装Tomcat
  17. 华哥倒酒(二分答案)
  18. 华为开发者选项锁屏已被管理员、加密政策或凭据存储禁用
  19. 计算机二级必过知识点大全,计算机二级ms-office办公软件必过知识点.doc
  20. 非常有意思的人体时钟

热门文章

  1. 017 包扫描器和标记注解
  2. 初始化JQuery方法与(function(){})(para)匿名方法介绍
  3. java中的final, finally, finalize的区别
  4. Google Maps JavaScript API V3 根据地址 加载地图
  5. hibernate执行sql的顺序问题
  6. buildroot output子目录
  7. 微信小程序 - 更改radio和checkbox选中样式
  8. Maven 项目创建 找不到web.xml
  9. 自然语言处理----处理原始文本
  10. [svc]visio绘制模具