2013-01-05 33 views
2

我對AJAX很新。我試圖從PHP文件中獲取由AJAX生成的選擇框的值。讓我給你什麼,我試圖做一個例子:獲取使用AJAX與PHP生成的值

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我試圖讓使用「子」選擇框提交的值。 我:

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

我選擇貓選擇框 獲得子選擇框完美,但我提交表單後,不要在$ _ POST [「子」]什麼。我確實得到了$ _POST ['cat']。 任何幫助或教程鏈接將不勝感激。

+1

你閉上你的表單標籤是否正確? – vodich

回答

0

1)在你getData.php,創建$html變量,但似乎沒有echo它的瀏覽器。

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

2)你的AJAX是錯誤的。在調用XHR的send()方法後,您無法立即獲得響應文本。你要聽上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>標籤。請務必在sub_cat div之後關閉表格,因爲這將包含表單輸入。

+0

感謝您的快速響應!是的,我確實關閉了表格。正如我之前所說,我可以回顯$ _POST ['貓'],但沒有從$ _POST ['sub_cat'] – muttalebm

+0

任何東西提交表單後,我得到以下結果: 1 // echo $ _POST ['cat'] 遇到PHP錯誤 嚴重性:通知 消息:未定義索引:sub – muttalebm

+0

是現在顯示的「sub」下拉菜單嗎?您可以在Firebug中查看請求,查看實際發佈的內容。 – MrCode

0

檢查您已關閉的HTML表單標籤: 後... 把

+0

是的,我做到了。我可以回顯出$ _POST ['cat'] – muttalebm