需要注意的是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