EasyUI和ajax调用的问题

时间:2015-09-13 00:10:29

标签: jquery ajax jquery-easyui

我正在使用EasyUI树,我正在尝试在父节点和子节点上设置图标。

代码如下:

        $('#inventorytree').tree ({
            url: 'inventory.json',
            method: 'get',
            animate: true,
            lines: true,
            formatter: function (node) {
                var s = node.text;
                var nodeicon = 'icon-blank';
                if (node.children){
                    var onlinecount = 0 ;
                    var offlinecount = 0 ;
                    for (var i = 0; i < node.children.length; i++) {
                                                        var status = IsOnlineAjaxCall(node.children[i].id);
                        if (status == 'true') {
                            onlinecount += 1;
                            node.children[i].iconCls = 'icon-green-dot';
                        } else {
                            offlinecount += 1;
                            node.children[i].iconCls = 'icon-red-dot';
                        }
                    }
                    var chlidrenlength = node.children.length
                    if (chlidrenlength > 0) {
                        if (onlinecount == chlidrenlength) {
                            node.iconCls = 'icon-green-dot';
                        } else if (offlinecount == chlidrenlength) {
                            node.iconCls= 'icon-red-dot';
                        } else {
                            node.iconCls= 'icon-orange-dot';
                        }
                    }
                    s += '&nbsp;<span style=\'color:blue\'>(' + chlidrenlength + ')</span>';
                }
                return s;
            },
        });

我实际检查节点(网络设备)是否处于离线状态。

由于我正在ping设备,我使用Ajax调用:

function IsOnlineAjaxCall(deviceid) {
    $.ajax({
        type: "POST",
        url: "Dashboard_v2.aspx/IsOnline",
        data: '{id: "' + deviceid + '" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (data) {
            //alert(data.d);
            var returnstr = data.d.toString;
            return returnstr;
            //return data.d;
        },
        //success: function (data) {
        //    return data;
        //},
        failure: function (response) {
        //alert(response.d);
        }
});

以下是我的问题;是的,我有几个:

1)我无法让树开始崩溃。

如果我将状态设置为关闭,我得到的最好的确是一个关闭状态但是空节点有一个加号,当点击它时,它会列出所有父节点。 调用函数到CollapseAll永远不会在按钮外调用。

2)从ajax函数中获取未定义的值

当从ajax函数运行警报时,我得到预期的结果:true或false。 一旦将值发送回树定义中的调用函数,我就会得到未定义。 做了相当多的研究,无法弄清楚如何解决它。

3)父节点上的iconCls

在子节点上设置iconCls属性(在此阶段手动)确实可以正常工作。 不考虑在父节点上设置iconCls。调用属性值,我得到我刚刚设置的值,但树不显示新图标,就像它对子项一样

非常感谢任何帮助

关于问题#2的更新 我正在使用div来“存储”ajax的结果,然后读取值:

    $.ajax({
        type: "POST",
        url: "Dashboard_v2.aspx/IsOnline",
        data: '{id: "' + deviceid + '" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (data) {
            document.getElementById("HidIpStatus").innerHTML = data.d;
        },
        failure: function (response) {
        }
    });

这种解决方法是有效的,但必须有更好的东西,不是吗?

1 个答案:

答案 0 :(得分:0)

当你编写一个依赖于ajax调用的返回值的函数时,除非你使用promises,否则它将失败。当你调用IsOnlineAjaxCall()时,这里发生了什么--javascript不知道它需要等待来自ajax调用的响应并继续运行,所以status == undefined。如果您阅读此处的文档,您将看到一些如何使用JQuery deferred.promise()修复它的示例。很难说,但我认为至少如果你超越这一点,其余部分可能会开始落实到位。