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.phpAJAX リクエストを作成するときに実際に値を送信しないため、値はあり$_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

次に、その URL を AJAX リクエストで使用します。

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

これはすべてリファクタリングして単純化できると確信していますが、観察して学ぶことができる論理的なステップに分解しようとしました。チェックボックスの状態を判断し、完全にクライアント側でメッセージを表示するだけでよいため、これに AJAX を使用する必要さえないことも明確に述べておく価値があります。ただし、AJAX の学習演習としてこれを行っていると思います。

于 2013-11-08T20:03:06.717 に答える
0

これにAJAXを使用する意味がわかりません。チェックボックスがオンになっているかどうかにかかわらず、javascriptをチェックインすることはできませんか?

とにかく、私はjQueryに慣れていますが、データを送信しているようには見えません。javascriptでチェックボックスがオンになっているかどうかをテストし、リクエストで結果を送信する必要があります。

于 2013-11-08T19:59:59.340 に答える