gpt4 book ai didi

ruby - 如何注入(inject)辛特拉/哈姆?

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:16 26 4
gpt4 key购买 nike

我编写了运行 ant(批处理文件)的小型网络应用程序。批处理文件的处理时间最多可能需要几分钟。

index.haml 列出所有可用的 ant 文件,run.haml 运行它们。现在的工作流程是,当我单击 index.haml 中的链接时,ant 脚本将运行,并在完成后将整个 run.haml 页面发送到浏览器。因此,在单击 index.haml 中的链接后,我仍然可以看到 index.haml,而 run.haml 中什么也看不到

在我点击来自 index.haml 的链接后我想

  • 显示将要运行的脚本
  • 运行ant脚本然后
  • 显示它的结果。

我是 recommended in my other question使用

我不明白单独的工作线程如何帮助我。一旦作业完成,ruby 调用捕获的延迟作业的结果是否会发送到浏览器?

我也不知道如何在 sinatra 中使用 Ajax。

有人能指出我的解决方案吗?请注意,我昨天了解了一些 ruby​​,学习了一些 sinatra 和 haml。对 Ajax 一无所知 :-) 我通过示例学习......并且乐于学习任何东西。

index.haml 给我类似的 html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Available test suits</title>
</head>
<body>
<h1>Available test suits</h1>
<br/><br/>
<a href='run?run=login_build'>login_build</a>
<br />
<a href='run?run=login_cycle_build'>login_cycle_build</a>
<br />
<a href='run?run=login_cycle_academicyear_build'>login_cycle_academicyear_build</a>
</body>
</html>

run.haml 看起来像

    !!!  
%html
%head
%title Running
%body
= "Starting test suite: #{params['run']}"
- output = %x[cd C:\\Program Files\\TestPro\\TestPro Automation Framework410 && ant -lib lib -f "C:\\Program Files\\TestPro\\TestPro Automation Framework410\\Output Files\\builds\\#{params['run']}.xml"]
-#The result is
%br
= output.split("\n")[-2,2].join("<BR>")
= "<br/>"*2
%a(href="/")back to suits list

最佳答案

如果你想使用 Ajax 必须选择一个 javascript 库 Dojo、Prototype、Mootools、jQuery...它们每个都有特定的工具来处理 ajax 请求。

在 javascript 中,你发出一个 xhr(Ajax 请求),它可能是异步的,但 Sinatra 仍然为你提供想要的内容,你可以在网页上显示你想要的内容。

var xhrLoadClientMenu = function(param){
var result_node = dojo.byId('div_menu')
var xhrArgs = {
// the Sinatra get "/run" ... end handler
url: '/run',
load: function(data){
// When response is rendered come's here
result_node.innerHTML = data;
},
error: function(error){
msg = "<p>Ooops some error ...<br><br>" + error + "</p>";
}
}
// Here you can put what you want to display durring loading
result_node.innerHtml = "Loading..."
var defered = dojo.xhrGet(xhrArgs)
}

使用 dojo 的 xhrGet 示例。查看内联评论。

  • xhrLoadClientMenu(param) 由事件触发;
  • id 为#div_menu 的页面中的 HTML 元素存储在 result_node 对象中;
  • xhrArgs 对象设置 Ajax 请求属性,例如:
    1. url:呈现内容的 Sinatra 处理程序;
    2. load: 函数获取sinatra的响应,并在加载完成时替换result_node内容
    3. error 如果出现问题,此消息将显示在 result_node 中;
  • 同时,您可以在加载真实内容时将 result_node 内容设置为任何内容;
  • 最后一行执行 xhr 请求。

所有这一切都是在没有重新加载页面的情况下发生的。

关于ruby - 如何注入(inject)辛特拉/哈姆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939866/

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