我有这个脚本,它返回一个项目类别的子类别列表。
但它似乎只在j.lenth =='0'
(json data = [])时才有用。
如果json返回一个数据(例如:[{optionValue:1,optionDisplay:'Sub cat 1'}])脚本的else
部分无效。
<script>
$(function () {
$("select#Category").change(function () {
$.getJSON("/content/category.php", {
id: $(this).val()
},
function (j) {
var options = '';
if (j.length == '0') {
options = '<option value="-1">There is no sub category</option>';
} else {
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
}
$("#sub").html(options);
$('#intSubRubriek option:first').attr('selected', 'selected');
});
});
});
category.php
<?php
$aCats = $oCon->dbFetchSmarty ( "SELECT * FROM `sub_category` WHERE parent_id = '" . $_GET['id'] . "' ");
if ( isset ( $_GET['id'] ) )
{
echo "[";
for ( $i = 0; $i < sizeof ( $aCats ); $i ++ )
{
if($i == 0)
{
echo "{optionValue: " . $aCats[$i]['sub_id'] . ", optionDisplay: '" . $aCats[$i]['sub_name'] . "'}";
}
else
{
echo ", {optionValue: " . $aCats[$i]['sub_id'] . ", optionDisplay: '" . $aCats[$i]['sub_name'] . "'}";
}
}
echo "]";
}
else
{
echo "[{optionValue: 0, optionDisplay: '". $_LANG['content']['categorien_1'] ."'}]";
}
?>
答案 0 :(得分:1)
[{optionValue: 1, optionDisplay: 'Sub cat 1'}]
是无效的JSON。它应该是
[{ "optionValue": "1", "optionDisplay": "Sub cat 1" }]
这就是为什么只有在获得空响应[]
时才执行成功处理程序的原因。当您获得带有项的响应时,实际上错误处理程序不是被触发的成功处理程序,因为响应不是持有有效的JSON。所以将代码更改为
if ($i == 0) {
echo '{ "optionValue" : "'.$aCats[$i]['sub_id'].'", "optionDisplay": "'.$aCats[$i]['sub_name'].'"}';
} else {
echo ',{ "optionValue" : "'.$aCats[$i]['sub_id'].'", "optionDisplay": "'.$aCats[$i]['sub_name'].'"}';
}