【问题标题】:creating a dashboard using ajax and XML使用 ajax 和 XML 创建仪表板
【发布时间】:2018-10-18 14:59:05
【问题描述】:

在这方面我需要一点帮助,我正在尝试使用 Ajax 构建一个仪表板,它解析 XML 文件中的数据并将其显示在表格/仪表板上。我想要类似的东西,如果 XML 的数据发生变化,它也应该反映在网站上(实时)/没有重新加载页面。我尝试了几个与 setInterval() 函数相关的技巧,但它只是复制了整个结果并继续这样做.. 下面是我试图这样做的 ajax 脚本和 xml。 XMl 的文件名为 XMLFile.xml。我的 XML 的小内容在评论中.. 假设如果第一个属性发生变化,DNSStatus 从“OK”变为“NOTOK”,绿色勾号应该变为红色叉号,并且也没有刷新整个页面。

<script language="javascript" type="text/javascript">
   var CheckImage = "<img src= 'images/check.png' height=''20 width='20'>";
    var CrossImage = "<img src= 'images/cross.png' height=''20 width='20'>";

       $.ajax({
            type: 'GET',
            url: 'XMLFile.xml',
            dataType: 'xml',
            cache: false,
            success: function (xml) {

                $(xml).find("URLs").each(function ()
                {
                    var Sitename = $(this).find('ProdURL').attr('ProdHost')
                    var URLType = $(this).find('ProdURL').attr('URLType')
                    var DNSStatus = $(this).find('ProdURL').attr('DNSStatus')
                    var TargetStatus = $(this).find('ProdURL').attr('TargetStatus')
                    var TTL = $(this).find('ProdURL').attr('TTL')
                    var SSL = $(this).find('ProdURL').attr('SSL')
                    var Force = $(this).find('ProdURL').attr('Force')

                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('RootURL').attr('RootHost')
                    var URLType = $(this).find('RootURL').attr('URLType')
                    var DNSStatus = $(this).find('RootURL').attr('DNSStatus')
                    var TargetStatus = $(this).find('RootURL').attr('TargetStatus')
                    var TTL = $(this).find('RootURL').attr('TTL')
                    var SSL = $(this).find('RootURL').attr('SSL')
                    var Force = $(this).find('RootURL').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('WorkingURL').attr('WorkingHost')
                    var URLType = $(this).find('WorkingURL').attr('URLType')
                    var DNSStatus = $(this).find('WorkingURL').attr('DNSStatus')
                    var TargetStatus = $(this).find('WorkingURL').attr('TargetStatus')
                    var TTL = $(this).find('WorkingURL').attr('TTL')
                    var SSL = $(this).find('WorkingURL').attr('SSL')
                    var Force = $(this).find('WorkingURL').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('ModuleURL').attr('ModuleHost')
                    var URLType = $(this).find('ModuleURL').attr('URLType')
                    var DNSStatus = $(this).find('ModuleURL').attr('DNSStatus')
                    var TargetStatus = $(this).find('ModuleURL').attr('TargetStatus')
                    var TTL = $(this).find('ModuleURL').attr('TTL')
                    var SSL = $(this).find('ModuleURL').attr('SSL')
                    var Force = $(this).find('ModuleURL').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('Moduleurl').attr('ModuleHost')
                    var URLType = $(this).find('Moduleurl').attr('URLType')
                    var DNSStatus = $(this).find('Moduleurl').attr('DNSStatus')
                    var TargetStatus = $(this).find('Moduleurl').attr('TargetStatus')
                    var TTL = $(this).find('Moduleurl').attr('TTL')
                    var SSL = $(this).find('Moduleurl').attr('SSL')
                    var Force = $(this).find('Moduleurl').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('VanityURL').attr('VanityHost')
                    var URLType = $(this).find('VanityURL').attr('URLType')
                    var DNSStatus = $(this).find('VanityURL').attr('DNSStatus')
                    var TargetStatus = $(this).find('VanityURL').attr('TargetStatus')
                    var TTL = $(this).find('VanityURL').attr('TTL')
                    var SSL = $(this).find('VanityURL').attr('SSL')
                    var Force = $(this).find('VanityURL').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

                $(xml).find("URLs").each(function () {
                    var Sitename = $(this).find('Vanityurl').attr('VanityHost')
                    var URLType = $(this).find('Vanityurl').attr('URLType')
                    var DNSStatus = $(this).find('Vanityurl').attr('DNSStatus')
                    var TargetStatus = $(this).find('Vanityurl').attr('TargetStatus')
                    var TTL = $(this).find('Vanityurl').attr('TTL')
                    var SSL = $(this).find('Vanityurl').attr('SSL')
                    var Force = $(this).find('Vanityurl').attr('Force')
                    showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force);

                });

            }


        });


    function showData(Sitename, URLType, DNSStatus, TargetStatus, TTL, SSL, Force)
    {
        var TargetStatusImage;
        if (TargetStatus === "OK")
        {
            TargetStatusImage = CheckImage;
        }
        else
        {
            TargetStatusImage = CrossImage;
        }
        var DNSStatusImage;
        if (DNSStatus === "OK")
        {
            DNSStatusImage = CheckImage;
        }
        else
        {
            DNSStatusImage = CrossImage;
        }
        var SSLImage;
        if (SSL === "OK")
        {
            SSLImage = CheckImage;
        }
        else
        {
            SSLImage = CrossImage;
        }
        $('#demo tbody').append('<tr><td>' + Sitename + '</td><td>' + URLType + '</td><td>' + DNSStatusImage + '</td><td>' + TargetStatusImage + '</td><td>' + TTL + '</td><td>' + SSLImage + '</td><td>' + Force + '</td></tr>')

    }

</script>

输入文件示例

<?xml version="1.0" encoding="utf-8" ?> 
<!--Website Status--> 
<WebApplication> 
  <URLs> 
    <ProdURL ProdHost="www.wellington.ca" URLType="Prod" DNSStatus="OK" TargetStatus="OK" TTL="300" SSL="OK" Force="Yes" /> 
    <RootURL RootHost="wellington.ca" URLType="Root" DNSStatus="OK" TargetStatus="NotOK" TTL="3583" SSL="OK" Force="Yes" />
    <ModuleURL ModuleHost="calendar.wellington.ca" URLType="Module" DNSStatus="OK" TargetStatus="OK" TTL="297" SSL="OK" Force="Yes" /> 
  </URLs>
</WebApplication>

【问题讨论】:

  • 请不要破坏您的帖子。通过在 Stack Exchange 网络上发布,您已授予 SE 分发该内容的不可撤销的权利(在 CC BY-SA 3.0 license 下)。根据 SE 政策,任何破坏行为都将被撤销。
  • @Machavity 你能帮我处理我的网页代码吗?我正在尝试在表中添加一列,该列将在 XML 中的数据发生更改时显示时间戳。

标签: javascript ajax xml web-applications


【解决方案1】:

在设置数据$('#demo tbody').append() 时,您需要覆盖现有值,而不是使用append。尝试使用$('#demo tbody').html(&lt;your data goes here&gt;)

【讨论】:

  • 它有效,但它只显示了其中一个内容.. 其他内容没有显示..
  • 那么您需要修改您的ShowData() 代码以在第一次调用时清理现有信息并在同一个回调中附加后续调用
  • 使用append,会显示整个表格内容.. 使用html,只会显示xml的最后内容
  • ShowData() 添加一个参数,如果该参数是true,则使用html,如果false 使用append。当您显示 ProdURL 时传递 true 并在所有其他情况下传递 false
  • 能否请您修改代码并粘贴到评论中??
猜你喜欢
  • 2020-04-16
  • 2015-09-18
  • 2011-11-19
  • 2014-10-01
  • 2023-01-20
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多