在jQuery函数中从PHP读取JSON数组

can*_*era 1 php jquery json

我正在使用此问题的接受答案来帮助我使用jQuery从JSON数组构建HTML选择菜单.

我的JSON数组从PHP脚本传递为$ menu,如下所示:

{ "options": [
    { "id":"7","name":"Smith, John"},
    { "id":"4","name":"Jones, Tom"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

首先,我构建选择菜单的骨架并将其插入页面:

var div = '<div class="row">';
var label = '<label for="employee">Employee</label>';
var select = '<select name="employee id="employee">';
var close = '</select></div>';
var menu = div + label + select + close;

$('#clicked_link').prepend(menu);
Run Code Online (Sandbox Code Playgroud)

然后我尝试将$ menu数组传递给jQuery,如下所示:

var json = '<?php echo $menu; ?>';
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用链接问题中的示例将选项附加到新创建的选择菜单:

var options = eval('(' + json + ')');
var length = options.length;

for (var j = 0; j < length; j++)
{
    var newOption = $('<option/>');
    newOption.attr('id', options[j].id);
    newOption.attr('name', options[h].name);
    $('#employee').append(newOption);
}
Run Code Online (Sandbox Code Playgroud)

选择菜单按预期显示,但不包含任何选项.任何人都可以看到我在哪里犯错误吗?提前致谢.

修订以纳入Rocket的解决方案:

var json = <?php echo $menu; ?>;

var options = json.options;
var length = options.length;

for (var j = 0; j < length; j++)
{
    var newOption = $('<option/>');
    newOption.attr('value', options[j].id);
    newOption.attr('text', options[j].name);
    $('#employee').append(newOption);
}
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 7

你不需要使用eval,甚至不需要使用JSON.parse.JSON是有效的JavaScript代码.你可以这样做:

var json = <?php echo $menu; ?>;  // Note: the quotes have been removed.
Run Code Online (Sandbox Code Playgroud)

这将产生以下代码:

var json = { "options": [
    { "id":"7","name":"Smith, John"},
    { "id":"4","name":"Jones, Tom"}
  ]
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是有效的JavaScript代码.

那你可以做var options = json.options.