需要注意的是JavaScript的執行在客戶端的瀏覽器,所以它不能直接訪問從那裏數據庫(我假設你正在談論的服務器沒有的WebSQL,的LocalDB或某事在傳統的數據庫類似。
什麼的javascript 例如可以訪問,是DOM。例如,您可以創建元素,並將其插入到DOM(就像你在你的例子做),但你也可以訪問那些元素已經存在。
您也可以創建AJAX請求。這是一個對服務器的異步請求,您可以使用它來獲取所需的數據。
但是,您選擇訪問數據庫時,如果沒有某些服務器端代碼,您將無法管理該數據庫。看到你的問題,目前還不清楚你用什麼技術來生成你的html(PHP,ASP,JSP,Ruby等)。但是,不管你使用模式仍平常:
- 創建一個頁面你得到的數據。該頁面應該是XML或JSON(或非常基本情況下的HTML),並且只包含要從服務器獲取的數據。
- 在客戶端(javascript)上創建一個AJAX請求您在上一步中創建的頁面。通過這種方式,您可以將所需的數據轉換爲JavaScript,您可以在其中執行任何操作。
- 最後轉換並使用這些數據。
假設您能夠完成前兩個步驟,並且您有數據(例如)JSON。你有一個包含字符串中的JSON的變量。像這樣:
var response = '[ { "id": 1, "text": "First" }, { "id": 2, "text": "Second" } ]';
你不需要像這樣鍵入它,你從服務器獲得它。
該怎麼辦? Make a javascript object從它:
var responseObj = JSON.parse(response);
這將返回一個對象,它是含有一個id和文本屬性2個對象的數組。
然後通過它去同一個循環:
var gradeSelect=document.createElement('Select');
gradeSelect.id="grade[]";
gradeSelect.name="grade[]";
for (var i = 0; i < responseObj.length; i++) {
var current = responseObj[i];
var opt=document.createElement('option');
opt.value = current.id;
opt.textContent = current.text;
gradeSelect.appendChild(opt);
}
隨意瀏覽的MDN portal身邊,你可以從中學到很多東西。
這是你在找什麼?
編輯:
看你的例子中,你只想要的ID從服務器:
var response = '[ 1, 2, 3, 5, 10, 20, 1000 ]';
var responseObj = JSON.parse(response); // Will return a list of numbers
然後:
var gradeSelect=document.createElement('Select');
gradeSelect.id="grade[]";
gradeSelect.name="grade[]";
for (var i = 0; i < responseObj.length; i++) {
var current = responseObj[i];
var opt=document.createElement('option');
opt.value = current;
opt.textContent = current
gradeSelect.appendChild(opt);
}
EDIT2:
另一種方法是將值呈現爲原始響應。這樣就不需要額外的ajax請求。
如果我理解你的意見正確,你正在做這樣的事情:
<html>
<head>
...
</head>
<body>
...
<div id="hidden_container">
<input type="hidden" class="grade_id" value="1" />
<input type="hidden" class="grade_id" value="2" />
<input type="hidden" class="grade_id" value="3" />
<input type="hidden" class="grade_id" value="4" />
</div>
</body>
</html>
請注意,我已經包裹與具有ID的div容器隱藏字段。這將幫助我選擇內容。
現在您需要解析這些輸入並將它們轉換爲數字數組。
var inputs = document.getElementById('hidden_container').getElementsByTagName('input');
var numbers = [];
for (int i = 0; i < inputs.length; i++) {
numbers.push(inputs[i].value);
}
numbers
變量是一個數組數組。如果你在上面檢查我的代碼,你可以使用這個變量代替responseObj
,你就完成了。
這種方法的問題是,爲什麼你沒有首先通過php呈現選項。如果您可以渲染隱藏的字段,那麼您也可以渲染選擇選項。
正確的方法是從數據庫獲取ID的列表,使用AJAX('xmlHttpRequest')調出數據,或者您可以在服務器端的某處打印列表,然後獲取它。通過打印我的意思是查詢並寫入一個JSON變量的JSON,例如: – RaphaelDDL 2013-04-24 12:34:55
我能夠得到id列表,但我不知道如何將它分配給選項。請給我任何示例,它將真正幫助我完整。 – Kalashri 2013-04-24 12:37:00
SoonDead的答案解釋我說的很清楚:) – RaphaelDDL 2013-04-24 13:04:42