2

我对 AJAX 很陌生。我正在尝试从 PHP 文件中获取 AJAX 生成的选择框的值。让我举一个例子,我正在尝试做的事情:

firstPage.html 包含:

<form action="next.php" method="post">
<select name=cat id=cat onchange=load_sub_cat(this.value)>
<option value=0 selected=selected >Select Category</option>
<option id=1 value=1>A  </option>
<option id=2 value=2>B  </option>
<option id=3 value=3>C  </option>
</select>

<div id=sub_cat>---Select--Subcategory---</div>
<script>
function load_sub_cat(str){
                var xmlhttp;
                xmlhttp=new XMLHttpRequest();
                xmlhttp.open("get","getData.php?q="+str,false);
                xmlhttp.send();
                document.getElementById("sub_cat").innerHTML=xmlhttp.responseText;
            }
</script>

getData.php 包含:

<?php
$q=$_GET['q'];
//Some database calls……………………………
$html="<select name=sub>";
$html.="<option value=1>Test 1</option>";//Populating the options from database
$html.="</select>";
?>

在 next.php 我试图获取使用“sub”选择框提交的值。我有:

<?php
echo $_POST['cat'];
echo $_POST['sub'];
?>

我通过选择 cat 选择框完美地获得了子选择框但是在提交表单后我在 $_POST['sub'] 处没有得到任何东西。我确实得到了 $_POST['cat']。任何帮助或教程链接将不胜感激。

4

2 回答 2

0

1)在您的getData.php中,您创建了$html变量,但您没有echo在浏览器中看到它。

...
...
$html.="</select>";
echo $html; // <-- echo it!

2)你的ajax是错误的。send()调用XHR的方法后,您无法立即获得响应文本。您需要监听onreadystatechange事件:

 xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("sub_cat").innerHTML=xmlhttp.responseText;
    }
  }

3)您需要将 HTML 属性用引号括起来:

onchange="load_sub_cat(this.value)"

4)看起来你缺少一个结束</form>标签。确保在div之后sub_cat关闭表单,因为这将包含表单输入。

于 2013-01-05T16:36:41.940 回答
0

检查您是否关闭了表单 html 标签: after ... put

于 2013-01-05T16:38:13.330 回答