【问题标题】:Sending Checkbox Values to PHP page using javascript Ajax and not jQuery使用 javascript Ajax 而不是 jQuery 将复选框值发送到 PHP 页面
【发布时间】:2012-07-28 15:39:27
【问题描述】:

我有一种情况,我需要对通过发送到 php 脚本的 ajax 请求选择的每个复选框进行插入查询,该脚本将在 mysql 中进行插入。

我知道如何在没有 ajax 调用的情况下通过简单的表单提交来做到这一点,将变量(如 groups[] 作为数组)并在 php 中为数组中的每个值运行 foreach 循环。

如何通过 post ajax 请求发送数组?

示例代码:

<input type='checkbox' name='groups[]' value='1'>Group A
<input type='checkbox' name='groups[]' value='2'>Group B
<input type='checkbox' name='groups[]' value='3'>Group C

请帮忙,我知道这可能很容易,但我就是不明白。伙计们,请不要给出任何 jquery 或之类的示例,因为我想要纯 html、javascript 和 php 解决方案。

感谢社区...

这里是 Javascript 函数:

<script type='text/javascript'>
function addResp(tid){

a = encodeURIComponent(document.getElementById('course_add_resp').value);
b = encodeURIComponent(document.getElementById('term_add_resp').value);
c = encodeURIComponent(document.getElementById('paper_add_resp').value);

var elements = document.getElementsByName('groups[]');  
var data = [];
for (var i = 0; i < elements.length; i++){
if (elements[i].checked){
    data.push('groups[]='+elements[i].value);
   }
}
params = "tid="+tid+"&course="+a+"&sem="+b+"&paper="+c+"&grp="+data;
if (window.XMLHttpRequest)
 {
xmlhttp=new XMLHttpRequest();
 }
else
   {
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.body.removeChild(document.getElementById('respBackground'));
document.body.removeChild(document.getElementById('respBox'));      
contents = xmlhttp.responseText;    
if(contents == "done"){
window.location = "teachers.php";
} else{
document.getElementById("studentBox").innerHTML = "There was a problem serving the     request.";
 }

    }
  }
 xmlhttp.open("POST","assignresp.php",true);
 xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 xmlhttp.send(params);

 }

</script>

和 php 脚本:

  <?php

  $tid = mysql_real_escape_string($_POST['tid']);
  $cid = mysql_real_escape_string($_POST['course']);
  $sem = mysql_real_escape_string($_POST['sem']);
  $paper = mysql_real_escape_string($_POST['paper']);
  $session = 12;
  $type = 1;

  $groups = $_POST['grp'];

  foreach ($groups as $value ) {
      $q1 = "insert into iars(sessionid,teacherid,courseid,semester,paperid,groupid,type)    values('$session','$tid','$cid','$sem','$paper','$value','$type')";
      $r1 = mysql_query($q1) or die(mysql_error());
      if(mysql_affected_rows() > 0){
          echo "done";
      }
      else{
          echo "fail"; 
      } 
  }


 ?>

【问题讨论】:

  • 你将不得不编写更多的代码来拒绝 jquery。
  • 我不想在这里使用 jqeury...
  • 我相信你有充分的理由......
  • 我从未使用过它,并且一直尝试在社区的帮助下编写自己的 javascript.. 这也需要一段时间才能理解,我的时间有点短.. .
  • 它实际上已成为标准,并且有更多的 ajax 教程使用它,因此它应该可以节省时间。

标签: php mysql html ajax


【解决方案1】:
var elements = document.getElementsByName('groups[]');  
var data = [];
for (var i = 0; i < elements.length; i++){
    if (elements[i].checked){
        data.push('groups[]='+elements[i].value);
    }
}
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(data.join('&'));
//for get
//xmlhttp.open("GET",url+"?"+data.join('&'),true);
//xmlhttp.send();

编辑

改变这两行。

params = "tid="+tid+"&course="+a+"&sem="+b+"&paper="+c+"&"+data.join('&');

$groups = $_POST['groups'];

【讨论】:

  • 嘿,非常感谢您的代码。我仍然有一个问题,因为我正在通过警告变量数据来检查值,根据您的代码,它显示 groups[]=1,groups[] =2 依此类推...当我将代码更改为仅输出变量数据时,它显示 1,2,3 ...我只想知道如何按照您的建议在 php 中处理变量。我知道如果我可以在 $groups = $_POST[groups] 之类的 php 变量中获取所有值,我将运行一个 foreach 循环来为每个值进行插入,但是如何使用你的 js 代码来实现这一点,因为它似乎我它将发送多个组 [] 到 php 脚本..
  • 它应该以相同的方式工作,无需更改您的 php 脚本
  • 然后在 php 脚本中我应该写 $groups = $_POST['groups[]'] 因为我们通过 javascript 发送的是 groups[]=1&groups[]=2 等等...
  • 不只是$groups = $_POST['groups'],它将是一个数组
  • 它不能以任何一种方式工作.. 只是为了检查,当我内爆 php 数组时,它显示 2,3 作为一个数组值并且与 var_dump 相同。 php 以某种方式将所有复选框值作为一个数组值。请帮忙..
【解决方案2】:

你可以通过两种方式做到这一点,

  1. 可以使用post型ajax调用

  2. 您可以使用 JavaScript 获取所有选中的复选框值,使逗号分隔的字符串并将其传递到一个变量中

这就是你所能做的...... :)

【讨论】:

  • 逗号分隔,我确实认为但是在 php 中它太复杂了,无法获取值并对每个值进行插入查询..
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多