Jquery函数需要string并获取json,处理数据

时间:2017-11-23 06:53:46

标签: jquery json

我有一个jquery函数,希望将字符串作为响应。但是,在非常罕见的情况下,它将收到一个json编码的对象。因此我正在使用:

function is_json(str) {
    try {
        var o = JSON.parse(str);

        // Handle non-exception-throwing cases:
        // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
        // but... JSON.parse(null) returns null, and typeof null === "object", 
        // so we must check for that, too. Thankfully, null is falsey, so this suffices:
        if (o && typeof o === "object") {
            return o;
        }
    } catch (e) {
    }

    return false;
}

检查我们是否收到JSON响应。不幸的是,即使我们是,该函数返回false。这是使用开发人员面板确认的。

这是脚本:

$('.create-viewer').on('click', function () {
    var id = $(this).attr('data-id');
    var table = $(this).attr('data-table');
    var url = '/neou_cms/ajax/table_render?id=' + id + '&table=' + table;
    $.get(url, function (data) {
        console.log(data);
        if (is_json(data)) {
            console.log('data_is_json');
            var obj = JSON.parse(data);
            data = obj.msg;
            // do something with data...
        }
        bootbox.dialog({
            message: data,
            title: $_lang.view_header,
            buttons: {
                success: {
                    label: $_lang.actions_ok,
                    className: 'btn-primary'
                }
            }
        });
    });
});

我的回复已向Chrome确认了application/json标题,其格式如下:

{"status":"error","msg":"Some message here."}

根据JSONLint验证

1 个答案:

答案 0 :(得分:0)

如果没有为$.get指定数据类型参数,它会尝试从Content-type标题中推断出类型。在您的情况下,因为它显示application/json,jQuery会自动为您解析它,data将是解析对象。所以你可以这样做:

$.get(url, function(data) {
    if (typeof data == 'object') {
        data = data.msg;
    }
    ...
});