2014-04-01 21 views
1

我有這樣的HTML代碼下拉列表。如何在php中使用ajax響應文本動態地在選擇標籤內部創建選項?

<select id="province" onchange="get_twn()"> 
<option value="western">Western</option> 
<option value="southern">Southern</option> 
</select> 

<select id="towns" name="towns"> 
</select> 

這是我的ajax代碼get_twn

function get_twn(){ 

    var e = document.getElementById('province');  
    var val = e.options[e.selectedIndex].value; 
    var xmlhttp; 
    alert('i came'); 
     if (window.XMLHttpRequest) 
      { 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

     xmlhttp.onreadystatechange=function(){   
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       //window.location.assign("login.php"); 
       var val = xmlhttp.responseText; 
       var selectList = document.getElementById('towns');   
       var option = document.createElement('option'); 
       option.value = val; 
       option.text = val; 
       selectList.appendChild(option); 

      } 
     } 
    xmlhttp.open("POST","test.php?a="+val,true); 
    xmlhttp.send(); 
} 

這是php代碼test.php

if(isset($_REQUEST["a"])){ 

     $result = $dba->get_twn($_REQUEST["a"]); 
     while($row = mysql_fetch_array($result)) 
     { 
      $val = $row['name']; 
      echo $val;   
     } 
} 

此代碼運行良好,但沒有什麼錯誤。當這段代碼執行時,它會創建選項標籤,但所有值相互結合,並只創建一個選項標籤。就像這樣。 problem但它應該看起來像這樣。 enter image description here

+0

你有它完全地錯了。 – Legionar

+0

@Legionar錯了?它是什麼? – Harshana

+0

檢查出來;-) – Legionar

回答

0

首先,你的PHP改成這樣:

test.php的:

if(isset($_REQUEST["a"])){ 

     $result = $dba->get_twn($_REQUEST["a"]); 

     $towns = array(); 

     while($row = mysql_fetch_array($result)) 
     { 
      $towns[] = $row['name'];  
     } 

     echo json_encode($towns); 
} 

而在你的功能get_twn更改此:

xmlhttp.onreadystatechange=function(){   
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      //window.location.assign("login.php"); 
      var selectList = document.getElementById('towns');  

      var jsonData = JSON.parse(val); 

      for (var i in jsonData) { 
       var option = document.createElement('option'); 
       option.value = jsonData[i]; 
       option.text = jsonData[i]; 
       selectList.appendChild(option); 
      } 

     } 
    } 
+0

那我該如何解碼? – Harshana

+0

等一下。我正在寫它:) – Legionar

+0

yhhhhhhhhhhhhhhhhhhhhhh ...其工作良好...謝謝...真棒.. :) – Harshana

0

嘗試這樣

if(isset($_REQUEST["a"])){ 

     $result = $dba->get_twn($_REQUEST["a"]); 
     while($row = mysql_fetch_array($result)) 
     { 
      echo "<option>".$row['name']."</option>";   
     } 
} 

在阿賈克斯

if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       //window.location.assign("login.php"); 
       var val = xmlhttp.responseText; 
       var selectList = document.getElementById('towns');   
       selectList.appendChild(val); 

      } 
+0

任何人都可以告訴我,在上面的代碼錯誤 –

+1

我不降級但我想最好在ajax請求中填寫

+0

解決方案是正確的,但在追加數據時在javascript中添加選項標籤會更好。 –

相關問題