1

您好,我有以下 html

<select id="fld_base_profile_id" defaultValue="-1" class="m-wrap span10" field="fld_base_profile_id" appEditor="true"></select>

我的ajax中有这个

$result['analyze_type'][]   = array ("id" => $row[idatabase::FIELD_ID], "name" => $row[idatabase::FIELD_PROFILE_NAME]);
echo json_encode($result);

在 js 部分(顺便说一下,我使用的是 Prototype.js):

var JSON    = transport.responseText.evalJSON();

在控制台中,我的 JSON.analyze_type 看起来像这样

Array[1]
0: Object
id: "939"
name: "Reaktif İndüktif Kontrolü Ana Profili"

问题是,我如何解析这个 JSON 数据,以便它可以改变我的 html

<option value="id">name</option>  ??

编辑:解决方案:

this.baseProfile    = $("fld_base_profile_id");

var JSON    = transport.responseText.evalJSON();
    this.type   = JSON.analyze_type;
    for(var i = 0; i < JSON.analyze_type.length; i++) {
        var profile = JSON.analyze_type[i];
        var opt     = document.createElement("option");
        opt.value   = profile.id;
        opt.text    = profile.name;
        this.baseProfile.appendChild(opt);
    }
4

3 回答 3

1

试试这个

var el = document.getElementById('fld_base_profile_id');

for(var i = 0; i < JSON.length; i++) {
    var profile = JSON[i],
        opt = document.createElement("option");

    opt.id = profile.id;
    opt.value = profile.name;
    el.appendChild(opt);
}​
于 2013-10-24T08:10:55.700 回答
1

你可以用更干净的方式来做

首先确保您Content-Type: application/json在 JSON 响应中传递标头 - Prototype 中的所有 Ajax 方法都会自动将响应处理为 JSON 并将其放入transport.responseJSON

然后你的javascript可以清理这个

this.baseProfile    = $("fld_base_profile_id");

var type = transport.responseJSON.analyze_type;

type.each(function(item){
    var option = new Element('option',{'value':item.id}).update(item.name);
    this.baseProfile.insert(option);
},this);
于 2013-10-24T14:43:11.000 回答
0

您可以使用 JSON.Parse 将获得的 JSON 转换为对象。然后您可以遍历项目,将每个项目分配给一个<option>对象,然后将它们附加到选择中。

JavaScript - 用数组填充下拉列表解释了如何创建选项标签。

于 2013-10-24T07:59:25.683 回答