我有一个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验证
答案 0 :(得分:0)
如果没有为$.get
指定数据类型参数,它会尝试从Content-type
标题中推断出类型。在您的情况下,因为它显示application/json
,jQuery会自动为您解析它,data
将是解析对象。所以你可以这样做:
$.get(url, function(data) {
if (typeof data == 'object') {
data = data.msg;
}
...
});