gpt4 book ai didi

javascript - 将字符串转换为 Javascript 对象以在 jqTree 中使用

转载 作者:行者123 更新时间:2023-12-03 11:53:56 25 4
gpt4 key购买 nike

我正在尝试使用 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 渲染的,因为我可以拖放它们,它们在单击时突出显示等,但我得到的不是 TreeView ,而是“悬空藤蔓” View ,并不完全有用。

如果我只是采用完全相同的字符串并将其声明为 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 认为它是一个对象。

工作示例,以便您可以看到我正在寻找的内容:

JSFiddle

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是邪恶的并且存在安全漏洞,但是,这都是仅在本地服务器和生产车间计算机上使用的内部代码,因此我认为风险是可以接受的(我的经理也是如此)。

最佳答案

eval(data) 在这种情况下可以工作,但使用 eval() 通常是一个安全问题,尤其是从公共(public)区域获取数据时,例如用户提交的数据SQL 数据。

最好的解决方案是寻找一种从 ASP.NET 导出 JSON 的真正方法。在不了解您的代码的情况下,稍微谷歌搜索一下就会发现那里有解决方案。

关于javascript - 将字符串转换为 Javascript 对象以在 jqTree 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25690459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com