请注意,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" } ]';
你不需要像这样输入它,你从服务器上得到它。
该怎么办?从中创建一个 javascript 对象:
var responseObj = JSON.parse(response);
这将返回一个对象,该对象是一个包含 id 和 text 属性的 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 门户中浏览,您可以从中学到很多东西。
这是你要找的吗?
编辑:
查看您的示例,您只需要来自服务器的 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);
}
编辑2:
另一种方法是将值呈现到原始响应中。这样就不需要额外的 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 呈现选项。如果您可以渲染隐藏字段,您也可以渲染选择选项。