点击一个按钮,生成一份csv文件,这个csvs生成过程很耗时,要放到后台执行,生成完了之后,还要把文件发送到客户端,这个采用ajax定时请求,去判断文件是否生成成功
1、页面上按钮
<%= button_to_remote "CSV", {:url => {:action => 'get_csv'},
:confirm => "Are u sure?"},
:class => "btn_red" %>
2、接受请求的action
def get_csv
spawn do # backgroud job
begin
# generating csv
# more code here
rescue Exception => e
pp e
Rails.cache.write("csv_#{Process.pid}", 'error')
Rails.cache.write("csv_#{Process.pid}_error", e)
return
end
# mark the csv generated completed
Rails.cache.write("csv_#{Process.pid}", true)
end
flash[:notice] = "Generating csv"
render :update do |page|
page.replace_html "promote", :partial => "/common/messages"
page.insert_html :top,
"progress_ajax",
periodically_call_remote(:url => {:action => "csv_task_progress"},
:frequency => 5)
end
end
3、定时请求的js和action
def periodically_call_remote(options = {})
variable = options[:variable] ||= 'poller'
frequency = options[:frequency] ||= 10
code = "#{variable} = new PeriodicalExecuter(function()
{#{remote_function(options)}}, #{frequency})"
javascript_tag(code)
end
def csv_task_progress
if Rails.cache.read("csv_#{Process.pid}").eql?('error')
# csv generating occurred error
Rails.cache.write("sbps_#{Process.pid}", nil)
flash[:error] = Rails.cache.read("csv_#{Process.pid}_error")
render :update do |page|
page << "poller.stop();"
page.replace_html "promote", :partial => "/common/messages"
end
return
elsif Rails.cache.read("csv_#{Process.pid}").blank?
# return if the csv file have not generated completely
return (render :text => nil)
end
# prevent the later request download csv
Rails.cache.write("csv_#{Process.pid}", false)
flash[:notice] = "CSV Generated yet"
download_url = "/admin/exact_count/download_csv"
render :update do |page|
js = <<-EOF
poller.stop(); // stop the periodically call
var elemIF = document.createElement("iframe");
elemIF.src = '#{download_url}';
elemIF.style.display = "none";
document.body.appendChild(elemIF);
EOF
page << js
page.replace_html "promote", :partial => "/common/messages"
end
end
4、下载csv的action
def download_csv
send_file("#{RAILS_ROOT}/tmp/csv.csv", :type=>'text/csv', :filename=>"csv.csv")
end
至此就可以完成这个需求了
分享到:
相关推荐
后者按钮则是下载用户选定的任务所生成的csv文件,单个任务被选择即单文件csv,多任务被选择自动压缩为压缩包后下载 其余的页面基本上都是查看,不再过多说明, 需要知道作为服务端的电脑()在局域网中所分配的IP,...
这个场景通常涉及到Ajax技术、后台处理以及文件下载。以下是关于"javaweb异步导出"的相关知识点: 1. **Ajax(Asynchronous JavaScript and XML)**:Ajax的核心是通过JavaScript在不刷新整个页面的情况下与服务器...
同时分为两个文件serverImage和clientImage,其中包含项目源码,一些配置文件,以及后端需要处理的两个csv文件,同时包含生成docker镜像的Dockerfile,可直接在serverImage和clientImage目录先直接build客户端镜像和...
这些文件格式在日常工作中广泛使用,但它们在Web浏览器中的直接展示并不直观,用户通常需要下载文件到本地然后打开。为了解决这个问题,开发者会采用将这些文件转换成HTML的形式来实现在线预览。本源码方案就是针对...
标题“GISTEMP-chart:CSV,AJAX,Chart.js”涉及到三个主要技术概念:CSV(逗号分隔值)文件、AJAX(异步JavaScript和XML)以及Chart.js,一个用于创建互动图表的JavaScript库。这三个元素在IT行业中都是至关重要的...
在实际应用中,这样的数据文件会被ASP程序读取并用于生成下拉菜单选项,同时Ajax会根据用户的选择动态加载市和区的数据。 总的来说,这个项目涵盖了以下几个关键知识点: 1. ASP服务器端脚本技术,用于处理用户请求...
"根据数据生成表格"指的是从数据库、CSV文件、JSON对象或其他数据源获取数据,并将其动态地填充到表格中。这通常涉及数据绑定技术,将数据模型与视图(即表格)连接起来,当数据改变时,表格会自动更新。例如,使用...
2. **与Cognos集成**:通过Cognos的API(如Cognos Connection API或Cognos Framework Manager API),Java服务可以与Cognos系统进行通信,获取报表数据或执行导出任务。 3. **处理导出**:在Java服务中,你可以使用...
2. **动态生成文件**:在某些情况下,文件可能需要在用户请求时动态生成,例如CSV报表或PDF文档。在这种情况下,后端接口应处理文件生成逻辑,完成后将文件流回给前端。 3. **文件类型处理**:对于不同类型的文件,...
开发者可以使用它来创建、调试和部署Ajax、jqGrid和进销存系统的后台代码。 综合以上知识点,"Ajax+JQuery+Json+Asp.net"这个压缩包可能包含了一个使用Ajax框架、jQuery库、JSON数据格式和ASP.NET技术构建的进销存...
AJAX的异步特性使得后台处理任务时,用户可以继续浏览其他内容,而无需等待页面刷新,实现了页面的动态性和实时性。 jQuery 是一个流行的JavaScript库,简化了DOM(文档对象模型)操作、事件处理、动画效果以及Ajax...
在程序开发中,可以使用各种编程语言(如Python、Java)的库来读取和解析csv文件,构建联动效果。 sql(Structured Query Language)是用于管理和处理关系数据库的标准语言。城市联动的sql数据可能是包含城市信息的...
本话题聚焦于如何利用C#将数据导出到Excel文件,这在数据分析、报表生成以及数据交换等场景中非常常见。JavaScript,尽管主要用在前端,但在与后端C#交互时也扮演着重要角色,特别是在处理动态数据和用户交互时。 1...
首先,jqGrid允许用户通过Ajax方式动态加载数据,支持多种数据格式,包括JSON、XML和CSV等。在本实例中,它与Java Servlet进行通信,Servlet作为服务器端的处理程序,负责接收前端请求,处理业务逻辑,并与数据库...
"jQuery"是一个流行的JS库,它简化了DOM操作、事件处理、Ajax交互等任务,使得开发者能更高效地编写代码。在这个JS多样式报表解决方案中,可能利用jQuery来处理DOM元素,如创建、更新或删除报表元素,以及响应用户...
例如,可以使用PHP的fputcsv()函数来生成CSV文件。 3. **安全措施** - 输入验证:对用户输入的数据进行过滤和验证,防止SQL注入和XSS跨站脚本攻击。使用预编译语句(如PDO的prepare()和execute())来执行SQL,避免...
".aspx.cs"文件是对应的后台代码文件,通常用C#或VB.NET编写,实现了页面逻辑和数据处理。 8. **bin目录**: ASP.NET应用程序的编译结果会被放置在这个目录下,包括编译后的DLL文件和其他依赖的库。 9. **data...
或者,如果数据量较大,可以考虑将Excel文件转换为CSV格式,然后用CSV解析库来读取,比如CsvHelper。 总的来说,ASP.NET中读取Excel内容并显示的过程涉及文件上传、Excel数据处理和前端展示等多个步骤。理解这些...
5. **创建下载链接**:使用`file-saver.js`可以创建一个虚拟的文件下载链接。生成文件后,通过触发这个链接的点击事件,浏览器会自动下载文件。 6. **异步处理**:由于导出可能会涉及大量数据,最好在后台处理并...
用户通过界面上传文件后,Flask应用接收文件,后台进行数据处理和模型训练,然后将结果返回给前端显示。 此外,考虑到安全性和性能,项目可能还涵盖了错误处理、日志记录、数据库集成(存储用户上传的文件或模型...