循环遍历json_encode的输出
Looping through output of json_encode
我正在尝试让这个解决方案工作:https://stackoverflow.com/a/30400111/4532066
我有一个简单的选择菜单:
<select class='form-control' id='builders' name='builder_id'>
<option value="1">Oracle</option>
<option value="2">SQL</option>
</select>
我想使用第一个 SELECT 中的 ID 来更改第二个 SELECT 的内容,ID 为"区域"
这是我正在使用的jQuery代码:
$(document).ready(function() {
$('#builders').change(function() {
var currentValue = $(this).val();
$.get("ajax_cats.php", {
'builder_id': currentValue
}, function(data) {
var regions = $.parseJSON(data);
$('#regions').empty();
for (var i = 0; i < regions.length; i++) {
var regionOption = '<option value="' + regions[i]['fld_label'] + '">';
regionOption += regions[i]['fld_label'];
regionOption += '</option>';
$('#regions').append(regionOption);
}
});
});
});
这是"ajax_cats.php"的内容
$sql = "SELECT cats.fld_label
FROM tbl_b_cats cats
WHERE cats.fld_parent = ?
ORDER BY cats.fld_label";
/* initialise */
$stmt = $conn->stmt_init();
/* prepare */
if (!$stmt->prepare($sql)) {
throw new Exception("Error preparing statement: $stmt->error, SQL query: $sql");
}
/* bind */
if (!$stmt->bind_param('s', $_GET['builder_id'])) {
throw new Exception("Error binding parameter: $stmt->error");
}
/* execute & store */
$stmt->execute();
$stmt->store_result();
/* 404 for no results */
if ($stmt->num_rows == 0) {
header('HTTP/1.0 404 Not Found');
exit;
} else {
$regions = array();
/* get results */
$stmt->bind_result($fld_label);
while ($stmt->fetch()) {
$regions['fld_label'][] = $fld_label;
}
//print_r(array_values($regions));
//$bob = json_encode($regions);
//r($bob);
echo json_encode($regions);
}
/* free and close */
$stmt->free_result();
$stmt->close();
$conn -> close();
我已经确认"ajax_cats.php"返回的数据是 JSON 格式 - 例如
{
"fld_label": ["AP", "AR", "EAM", "GL", "HR", "INV", "Other", "PA", "PO", "SysAdmin"]
}
我认为问题出在jQuery中,在本节中:
var regions = $.parseJSON(data);
$('#regions').empty();
for (var i = 0; i < regions.length; i++) {
var regionOption = '<option value="'+regions[i]['fld_label']+'">';
regionOption += regions[i]['fld_label'];
regionOption += '</option>';
$('#regions').append(regionOption);
}
从昨天在S/Overflow上阅读来看,"长度"选项仅在您使用数组时才有效。
因为如果我这样做:
console.log(regions.length);
它返回"未定义"
我想知道如何解决这个问题?
谢谢
需要进行一些调整:
- 将
var regions = $.parseJSON(data);
更改为var regions = $.parseJSON(data).fld_label;
。这将为您提供区域数组。 - 然后将
regions[i]["fld_label"]
更改为regions[i]
代码片段:
var data = "{ '"fld_label'": ['"AP'", '"AR'", '"EAM'", '"GL'", '"HR'", '"INV'", '"Other'", '"PA'", '"PO'", '"SysAdmin'"]}";
var regions = $.parseJSON(data).fld_label; // To get the array ["AP", "AR, ...]
$('#regions').empty();
for (var i = 0; i < regions.length; i++) {
var regionOption = '<option value="' + regions[i] + '">';
regionOption += regions[i];
regionOption += '</option>';
$('#regions').append(regionOption);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="regions"></select>
查找 JSON 长度的正确方法是使用如下所示的键:
var length = regions.fld_label.length;
这将为您提供 JSON 密钥值的长度,使用此长度,您可以循环到 JSON 中特定密钥的值。
这样说吧,希望你不会得到那个错误
var regionOption = '<option value="'+regions.fld_label[i]+'">';
相关文章:
- 在JavaScript中输出转义字符
- 如何在jQuery中将函数的输出分配给变量
- Javascript,输出结果后页面不断刷新
- Datetime格式为Friendly Time.Moment JS输出错误
- 如何将angularjs中的javascript字符串输出为循环数组
- HTML5FileReader输出到D3.js图表
- console.log以外的Javascript输出函数
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- PHP中的数组输出
- 以不同的顺序输出数据
- 使用Rivets.js输出类
- 在Chrome扩展内部输出Google API调用
- 如何为d3.js图表输出组织/嵌套数据
- 将IndexedDB中的数据拉入数组,并通过ReactJS输出
- 一个ajax循环有两个输出错误innerHTML
- 快速排序程序未正确输出
- 函数将输出nan而不是数字,为什么
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 如何在页面一侧的浮动框中显示用户脚本的输出
- 表中的JSON ENCODE输出