将JSON返回数据附加到html中无法正常工作

时间:2015-10-12 13:25:54

标签: php json ajax

我有这个脚本,它返回一个项目类别的子类别列表。

但它似乎只在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'] ."'}]";
}

?>

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'].'"}';
}