有一个简单的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";
}
?>
答案 0 :(得分:1)
在发出AJAX请求时,您实际上并未向checkbox.php
发送任何值,因此$_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的学习练习。
答案 1 :(得分:0)
我没有看到使用AJAX的意义,如果选中复选框,您是否只能查看javascript?
无论如何我更习惯jQuery,但似乎你没有发送任何数据,你需要测试是否在javascript中选中了复选框并在你的请求中发送结果。