如何使用Ajax/jQuery使用服务器进程的XML输出更新表?

如何使用Ajax/jQuery使用服务器进程的XML输出更新表?,jquery,html,xml,ajax,cgi,Jquery,Html,Xml,Ajax,Cgi,我的web服务器上有一个可执行文件,可以将XML输出到文件或标准输出。XML包含我想转换为表的数据。每个用户的XML都是唯一的,并且会定期更改 在我的网页上,我想: 触发在设置的时间段(例如30分钟)运行此可执行文件以刷新XML数据 解析此XML,并在触发的运行之间XML数据发生更改时动态添加/删除表行 对于#2,我想我可以使用$.ajax()获取服务器端XML文件并处理其内容,使用innerHTML呈现表格并将其添加到网页 我想我被困的部分是第1项。我的网页是从Perl CGI脚本输出的。脚本

我的web服务器上有一个可执行文件,可以将XML输出到文件或标准输出。XML包含我想转换为表的数据。每个用户的XML都是唯一的,并且会定期更改

在我的网页上,我想:

  • 触发在设置的时间段(例如30分钟)运行此可执行文件以刷新XML数据

  • 解析此XML,并在触发的运行之间XML数据发生更改时动态添加/删除表行

  • 对于#2,我想我可以使用
    $.ajax()
    获取服务器端XML文件并处理其内容,使用
    innerHTML
    呈现表格并将其添加到网页

    我想我被困的部分是第1项。我的网页是从Perl CGI脚本输出的。脚本完成后,HTTP请求完成,客户端和服务器之间不再通信

    我是否需要在服务器上运行一个单独的进程,将XML文件放在jQueryAjax调用可以根据需要找到它的地方?(我希望避免这种情况,因为我必须管理许多单独的流程和XML文件,这取决于用户在网站上的位置、是否登录等。)

    或者,有没有更干净的方法让客户端网页要求web服务器运行服务器端可执行文件,而无需重新加载网页?比如一个隐藏的表单,当它被触发时,可以调用一个动作而不需要重新加载整个页面


    抱歉,如果这些是愚蠢的问题。谢谢您的建议。

    您可以使用jquery每隔一段时间(比如30分钟)执行一次函数,并向服务器发出ajax请求。反过来,服务器将执行并请求XML文件,并将其推送到javascript函数,您可以在那里解析它。 按照我对你问题的理解,1不是问题。一旦呈现了web页面,您就无需执行任何操作

    像这样:

    window.setInterval(getXML, 1800000); //will execute the function every 30 minutes
    
    function getXML() { 
    
       $.ajax({
         type: 'POST',
         url: http://yourserver.com/somepageorform,
         data: data, //any data you may need to send
         success: function(data) { 
            var url = data;
            $.ajax({
               type: 'GET',
               url: url,
               success: function(xml) {
               //process the xml
            },
         dataType: dataType
       });
      },
      dataType: dataType
    
    });
    }
    

    这是对服务器的异步调用。然后
    somepageorform
    将执行cgi并生成XML文件。在doSomething()函数中,您将拥有一个处理XML的函数,因为它在处理完成之前不会执行。我假设CGI将返回文件的路径,因此在您的函数中,您将能够获取并处理它。

    您的两个选项是在页面上使用jQuery函数轮询服务器并检查更改,或者让服务器将更改推送到客户端

    为了方便第一个是微不足道的,有插件,如插件,可以帮助您轮询服务器。这是最简单的方法,但这意味着您可能会有很多冗余呼叫


    或者,在服务器上生成文件后,您可以使用类似的方法将通知推送到客户端。这有点复杂,但可以让您更好地控制何时将更新发送到客户端。

    老实说,我不喜欢使用JQuery执行30分钟轮询的想法,因为它严格依赖于客户端。如果你有一个像我一样笨的用户,我一次在7种不同的浏览器中打开你的网页:D,那么基本上,这个用户将要求服务器每30分钟执行7次相同的Perl CGI脚本。此外,如果用户只访问web页面几分钟,那么JQuery将永远没有机会触发该Perl CGI脚本

    如果您的脚本不能作为web服务使用(好吧,首先这将是理想的),唯一可行的方法是将脚本安排为每30分钟运行一次,比如使用cron作业。当然,这是一个单独的过程,我也不喜欢这样,但至少你可以确保所有用户每30分钟更新一次数据,而不是依赖你的用户来更新数据


    我的1.5美分。:)

    问题是,我没有web服务通过GET请求等提供XML文件。它将是服务器文件系统中某个位置的临时文件,在可执行文件运行时创建或更新。如何设置Ajax调用,让服务器按需运行可执行文件,生成临时XML,并将该XML发送回客户端?这就是我丢失的部分,我明白了。你能写一个简单的服务器端函数来运行可执行文件吗?或者这是不可行的?我正在寻找一种方法,让客户端告诉服务器运行一个可执行文件,而无需重新加载页面。到目前为止,我可以得到一个现有的XML文件,但必须先创建该文件。我想知道是否有一种方法可以定期触发调用运行可执行文件的CGI脚本的表单,但不必重新加载整个页面。可以运行并异步更新HTML表的东西。这就是我的意思。我正在更新我的答案。你提出了一个很好的观点,但这可以很容易地在客户端和服务器端进行管理。正如他提到的,他并不热衷于运行服务器端进程来生成文件,这完全不是一个愚蠢的问题。我认为这是网络开发中的大象。无法轮询文档。。。并用更改的垃圾更新DOM。。。我认为这是一些过时的“安全挂断”在浏览器供应商的部分,他们使长期投票如此难以捉摸。。。让孩子们尽可能长时间地沉迷于服务器端曲柄,我想。。。