0

以下代码创建选择标签。我在这里创建选项。并为其赋值。实际上我想将我所有的“grad_id”添加到数据库中的选择下拉列表中。但是在 javascript 中。

var gradeSelect=document.createElement('Select');
gradeSelect.id="grade[]";
gradeSelect.name="grade[]";

var opt1=document.createElement('option');
opt1.value="obj";
opt1.textContent="obj";

gradeSelect.appendChild(opt1);

在“obj”的地方,我想从数据库中添加 id。

4

2 回答 2

1

请注意,javascript 在客户端的浏览器中执行,因此无法从那里直接访问数据库(我假设您正在谈论服务器上的传统数据库,而不是 WebSQL、LocalDB 或类似的东西。

例如,javascript可以访问的是DOM。例如,您可以创建元素并将其插入 DOM(就像您在示例中所做的那样),但您也可以访问已经存在的元素。

您还可以创建AJAX请求。这是对服务器的异步请求,您可以使用它来获取所需的数据。

但是,您选择访问您的数据库,如果没有一些服务器端代码,您将无法管理。看到您的问题,尚不清楚您使用什么技术来生成 html(PHP.ASP、JSP、Ruby 等...)。但无论你使用什么模式,它仍然是平常的:

  1. 创建一个从中获取数据的页面。该页面应该是XMLJSON(或在非常基本的情况下为 HTML),并且只包含您想从服务器获取的数据。
  2. 在客户端 (javascript)上,为您在上一步中创建的页面创建 AJAX 请求。通过这种方式,您可以将所需的数据发送到 javascript,在那里您可以使用它做任何您想做的事情。
  3. 最后转换和使用数据。

假设您能够执行前两个步骤,并且您将数据保存在(例如)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 呈现选项。如果您可以渲染隐藏字段,您也可以渲染选择选项。

于 2013-04-24T13:01:18.640 回答
0

看看这个例子。我想它会帮助你!

http://www.w3schools.com/php/php_ajax_database.asp

于 2013-04-24T12:54:58.080 回答