2011-12-27 154 views
0

我試圖一起使用Ajax,PHP和MySQL來創建表單元素,下拉式樣選擇輸入能夠選擇一個選項並讓ajax通過腳本將數據發送到數據庫並返回頁面到一個單獨的div。我有這個想法的大部分代碼。我現在的問題是這個。我可以在一個腳本中使用多個函數嗎?

我有三個下拉菜單,1想要去這個腳本。然後它將根據從中選擇哪個菜單轉到三個不同的$ GET腳本。

<script type="text/javascript"> 
function showUser(str) 
{ 
if (str=="") 
    { document.getElementById("txtHint").innerHTML=""; 
    return; } 
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("txtHint").innerHTML=xmlhttp.responseText; } 
    } 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); } 
</script> 

我有三個選擇元素伴隨着onchange函數。

<select name="characters" onchange="showCharacter(this.value)"> 
<select name="towers" onchange="showTowers(this.value)"> 
<select name="enemies" onchange="showEnemies(this.value)"> 

的PHP代碼我對這個劇本是這樣的:

<?php 

include("dbinfo.inc.php"); 

mysql_connect(localhost,$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 
mysql_select_db("db1801445-main", $con); 
$sql="SELECT * FROM user WHERE id = '".$q."'"; 
$result = mysql_query($sql); 
$q=$_GET["q"]; 

echo "<table border='1'> 
    <tr> 
    <th>Name</th> 
    <th>Description</th> 
    </tr>"; 
while($row = mysql_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['Name'] . "</td>"; 
    echo "<td>" . $row['Description'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysql_close($con); 
?> 

IDK要不然怎麼做,所以你們可以幫助我嗎?

+7

這縮進風格是可怕 – 2011-12-27 16:01:31

+0

是......呃......我也複製並粘貼它...我沒有考慮到演示我能得到它爲我正常工作。 – 2011-12-27 16:13:13

+2

無論如何,它應該是您實際代碼的一部分。清晰的代碼使可維護的代碼。它應該是自動的,就像你寫的那樣。 – 2011-12-27 16:13:47

回答

1

我同意使用jQuery將讓您的生活更容易,但要解決你的問題:

你能有這樣的JS代碼更普遍,因此會更容易重用:

<script type="text/javascript"> 
function doAjax(ajaxFunction, str) 
{ 
if (str=="") 
    { document.getElementById("txtHint").innerHTML=""; 
    return; } 
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("txtHint").innerHTML=xmlhttp.responseText; } 
    } 
xmlhttp.open("GET","getuser.php?q="+str+"func="+ajaxFunction,true); 
xmlhttp.send(); } 
</script> 

然後改變你的PHP這樣做:

<?php 
$sFunction = $_GET["func"]; 
$sQ =$_GET["q"]; 

switch($sFunction){ 

    case 'showUser': 
     //code here; 
    break; 
    case 'showTowers': 
     //code here; 
    break; 
    case 'showEnemies': 
     //code here; 
    break; 
    case 'showCharacters': 
     //code here; 
    break; 
} 

>

再換在T他前端:

<select name="characters" onchange="doAjax('showCharacter',this.value)"> 
<select name="towers" onchange="doAjax('showTowers',this.value)"> 
<select name="enemies" onchange="doAjax('showEnemies',this.value)"> 
+0

謝謝你的幫助!我非常感謝。 – 2011-12-28 00:56:16

+0

當我嘗試使用你給我的函數時,螢火蟲給我一個錯誤,說「doAjax沒有定義」。我把你放在這裏的所有代碼都放在他們各自的地方,用正確的方式指向相應的腳本。 doAjax如何定義?當onchange事件發生時,不應該將命令發送到Ajax腳本,然後它會找到php腳本的去向,從數據庫獲取數據,然後使用Ajax腳本將它顯示在屏幕上?我幾乎可以肯定這就是它應該如何工作......我可能是錯的,但如果我是,請糾正我。 :) – 2012-01-07 10:19:36

+0

你說得對。也許在生成錯誤的JS中有錯誤。你用螢火蟲檢查過嗎? – 2012-01-10 12:02:27

相關問題