0

检查是否选中复选框的简单 AJAX 调用存在问题。此时,无论复选框是否被选中,它都会打印“未选中”。我尝试在他的 PHP 代码中更改“POST”/“GET”方法,但结果是一样的,我不知道为什么?有什么想法吗?谢谢!

      #test.html
      <html>
      <head>
      <script type="text/javascript">
        function load()
        {
           var xmlhttp;
           if (window.XMLHttpRequest)
           {// code for IE7+, Firefox, Chrome, Opera, Safari
             xmlhttp=new XMLHttpRequest();
           }
           else
           {// code for IE6, IE5
               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
           }
           xmlhttp.onreadystatechange=function()
           {
             if (xmlhttp.readyState==4 && xmlhttp.status==200)
             {
                 document.getElementById("div1").innerHTML=xmlhttp.responseText;
             }
          }
          xmlhttp.open("GET","checkbox.php",true);
          xmlhttp.send();
         }
        </script>
        </head>
        <body>

      <input type="checkbox" value="value1" name="check1"/>BOX 1</input>
      <br>
      <input type="checkbox" value="value2" name="check2">BOX 2</input>
      <br>
      <button type="button" onclick="load()">Run</button>
      <div id="div1"></div>

      </body>
      </html>


      #checkbox.php
      <?php
      if(isset($_GET['check1'])        
      {
         echo "checked";
      }
      else
      {
         echo "not checked";
      }   
      ?>
4

2 回答 2

1

checkbox.php在发出 AJAX 请求时,您实际上并没有发送任何值,因此$_GET['check1']永远不会有值。因此,else总是到达该块。

在您的load()函数中,您需要确定复选框的当前状态,并在 AJAX 请求中将该状态发送到服务器。像这样的东西可能能够确定该状态:

var checkedBox = '';
if (document.getElementsByName('check1')[0].checked) {
    checkedBox = 'check1';
} else if (document.getElementsByName('check2')[0].checked) {
    checkedBox = 'check2';
}

所以checkedBox将保留当前选中的第一个复选框的名称(此处假设单选按钮功能,但您可以根据需要调整您想要完成的任何内容),或者如果未选中任何内容,则为空值。

然后您可以在 URL 值中使用它:

var ajaxUrl = 'checkbox.php';
if (checkedBox !== '') {
    ajaxUrl += '?' + checkedBox + '=true';
}

因此,例如,如果check1选中,则结果ajaxUrl值为:

checkbox.php?check1=true

如果什么都没有检查,那就是:

checkbox.php

然后在您的 AJAX 请求中使用该 URL:

xmlhttp.open('GET', ajaxUrl, true);

我敢肯定,这一切都可以重构和简化,但我试图将其分解为您可以观察和学习的逻辑步骤。绝对值得一提的是,您甚至不需要为此使用 AJAX,因为您只需确定复选框的状态并完全在客户端显示消息。不过,我你是把它作为 AJAX 的学习练习来做的。

于 2013-11-08T20:03:06.717 回答
0

我没有看到为此使用 AJAX 的意义,如果复选框被选中,你不能只检查 javascript 吗?

无论如何,我更习惯 jQuery,但您似乎没有发送任何数据,您需要测试是否在 javascript 中选中了复选框并将结果发送到您的请求中。

于 2013-11-08T19:59:59.340 回答