2009-02-14 60 views
-1

我有一個簡單的頁面,我可以選擇一個客戶端,然後我選擇了自動填充到屬於客戶端的項目。我使用PHP/MySQL來獲取結果。jQuery和自動populat選擇

我看了一下這個:http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/但我認爲這是從頁面上的兩個字段開始。我試圖重寫代碼,但沒有很好地出現。

var client_id = $('#c_id').val(); 
    $.getJSON("../inc/get-projects.php", {id: client_id}, function(data){ 
     projects = $('#p_id'); 
     projects.empty(); 
     $.each(data, function() { 
      var option = $('<option/>').attr('value', this.id).text(this.name); 
      projects.append(option); 
     }); 
    }); 

PHP:

<?php 
    include "config.inc.php"; 
    $sth = mysql_query(
     sprintf(
     "SELECT c_id,p_id,p_title FROM projects WHERE c_id = %s", 
     mysql_real_escape_string($_GET['id']) 
     ) 
    ); 
    $projects = array(); 
    while($r = mysql_fetch_assoc($sth)) { 
     $projects[] = array('id' => $r['p_id'], 'name' => $r['p_title']); 
    } 
    print json_encode($projects); 
    exit; 


?> 
+0

哦,我明白了什麼是錯的。你看我如何命名我的變量'$ projects'並且你命名了你的'projects'?你傳遞給函數的值已經被稱爲沒有$的項目,所以當你做項目= $('#p_id');您正在覆蓋服務器的輸出。我更新了我的答案。 – 2009-02-18 18:01:53

+0

什麼不適用於它?獲取Firefox的Firebug並檢查服務器返回的內容。 – 2009-02-19 03:06:26

回答

6

如果你有HTML這樣的:

你可以擁有jQuery代碼像這樣:

$(document).ready(function() { 
    var $clients = $('#clients'); 
    $clients.change(function() { 
     var client_id = $clients.val(); 
     $.getJSON("getProjects.php", {id: client_id}, function(projects) { 
      $projects = $('#projects'); 
      $projects.empty(); 
      $.each(projects, function() { 
       var option = $('<option/>').attr('value', this.id).text(this.name); 
       $projects.append(option); 
      }); 
     }); 
    }); 
}); 

,然後有getProjects.php返回類似:

$sth = mysql_query(
    sprintf(
    "SELECT * FROM projects WHERE client_id = %s", 
    mysql_real_escape_string($_GET['id']) 
    ) 
); 
$projects = array(); 
while($r = mysql_fetch_assoc($sth)) { 
    $projects[] = array('id' => $r['id'], 'name' => $r['name']); 
} 
print json_encode($projects); 
exit; 

我沒有測試過這一切,但它或多或少你想要什麼,我想。

編輯 - 測試和工作,顯然它可能不是你所需要的,但它讓你知道如何去做。希望能幫助到你。

編輯2 - 與您的代碼的問題是在這裏:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(projects){ 
    projects = $('#p_id'); 
    projects.empty(); 
    $.each(projects, function() { 
     var option = $('<option/>').attr('value', this.id).text(this.name); 
     projects.append(option); 
    }); 
}); 

您將要覆蓋傳遞到與2號線的projects功能的projects。我在我的代碼中使用了$來區分這兩個,這可能不是最好的方式。要修復,請將代碼更改爲:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(data){ 
    projects = $('#p_id'); 
    projects.empty(); 
    $.each(data, function() { 
     var option = $('<option/>').attr('value', this.id).text(this.name); 
     projects.append(option); 
    }); 
});