我正在尝试使用 jqTree 呈现可折叠树,以通过使用 AJAX 的 ASP.NET 项目显示来自 MySQL 数据库的数据。
问题:
我可以从我的 AJAX 调用中成功获取包含 jqTree 格式数据的字符串(即使他们说它支持它也不是 JSON)。但是,一旦我得到它,它就会呈现为垂直字符串。如果我对数据进行 typeof 调用,它会说它是一个字符串,即使它在通过 console.log 目视检查时“看起来”像一个对象。
我尝试了多种不同的方法将字符串放入对象中,但结果各不相同。
我在后面的代码中使用它来返回制造的字符串:
return sb.ToString();
结果字符串如下所示(注意没有换行引号):
[{label: 'PCBID: 350',children:[{label: 'TimeStamp: 04-Sep-14 10:30:23'},{label: 'User: DAVEG'},{label: 'PCBID: 350'},{label: 'Assembly Drawing: 41411'},{label: 'PCB Drawing: 10348'},{label: 'Vendor: SBE'},{label: 'PO Number: 98019'}]},{label: 'Serial Number: Not Assigned'},{label: 'Assembly Drawing: 41411'},{label: 'Last Test Result: None Found'}]
在我的 div 中呈现如下:
[
{
l
a
b
e
l
:
'
P
C
B
I
D
...and so on...
我知道这些是由 jqTree 呈现的,因为我可以拖放它们,单击它们时它们会突出显示等,但是我得到的不是树形视图,而是一个“悬垂的藤蔓”视图,并不完全有用。
如果我只是采用完全相同的字符串并将其声明为 JS 中的 var(不使用 message.d 的返回值):
var data = [{label: 'PCBID: 350',children:[{label: 'TimeStamp: 04-Sep-14 10:30:23'},{label: 'User: DAVEG'},{label: 'PCBID: 350'},{label: 'Assembly Drawing: 41411'},{label: 'PCB Drawing: 10348'},{label: 'Vendor: SBE'},{label: 'PO Number: 98019'}]},{label: 'Serial Number: Not Assigned'},{label: 'Assembly Drawing: 41411'},{label: 'Last Test Result: None Found'}]
在我的 JS 代码中并使用它,它可以完美显示,并且 typeof 认为它是一个对象。
工作示例,以便您可以看到我在寻找什么:
JS端的代码:
这是我的 AJAX 调用的成功部分,其中包含一堆也不起作用的注释掉的版本:
success: function (message)
{
console.log("SUCCESS: Inside processEvent AJAX success call");
console.log(message.d);
console.log(typeof message);
console.log(typeof message.d);
var data = message.d;
//this method works, but not very useful as it's hard coded:
//var data = [{ label: 'PCBID: 350', children: [{ label: 'TimeStamp: 04-Sep-14 10:30:23' }, { label: 'User: DAVEG' }, { label: 'PCBID: 350' }, { label: 'Assembly Drawing: 41411' }, { label: 'PCB Drawing: 10348' }, { label: 'Vendor: SBE' }, { label: 'PO Number: 98019' }] }, { label: 'Serial Number: Not Assigned' }, { label: 'Assembly Drawing: 41411' }, { label: 'Last Test Result: None Found' }];
var data = $.getJSON(message.d);
//var data = { JSON.parse(message.d) };
//var data = ({}).valueOf.call($.parseJSON(message.d));
//var data = object.create(message.d);
console.log(typeof data);
console.log(data);
$(function ()
{
$('#tree1').tree({
data: data,
autoOpen: false,
saveState: true,
dragAndDrop: true
});
});
问题:
所以毕竟,我的问题是,如何从 AJAX message.d 中获取字符串并将其转换为对象,以便 jqTree 可以使用它来呈现我正在寻找的树?
工作代码:
我已经添加了一些成功用户通知的东西(jGrowl),所以不要让它丢给你。修复它的代码位在这里: data = eval($.parseJSON(message.d));
success: function (message)
{
console.log("SUCCESS: Inside processEvent AJAX success call");
console.log(message.d);
//if it's a non query event, do this
if (DTO.eventData.eventType != "PCBID_query")
{
$.jGrowl("\nSuccessfully inserted a " + DTO.eventData.eventType + " event into the MySQL database.",
{ header: 'SUCCESS', theme: "pcb-success", life: 10000 });
}
//if processData was used for a PCBID query, process this code
if (DTO.eventData.eventType === "PCBID_query")
{
var data = {};
data = eval($.parseJSON(message.d));
$(function ()
{
//force reload of tree data
$('#tree1').tree('loadData', data);
$('#tree1').tree({
data: data,
autoOpen: false,
saveState: true,
dragAndDrop: true
});
});
}
我知道这eval
是邪恶的并且存在安全漏洞,但是,这是所有内部代码,只能在本地服务器和生产车间计算机上使用,所以我认为风险是可以接受的(我的经理也是如此)。