我不得不在ASP classic中编写报告系统。 编写线框的人没有性能/速度/ SQL如何工作的概念等等,所以我从数据库中获取数据有很多乐趣。
但是,他们想要按下按钮,用户可以按下这些按钮将报告“下载”到CSV文件中。
我可以提交表单并重新运行SQL(由于一页上显示的报告数量及其格式需要很长时间) - 然后只需将其作为文件发送到浏览器。
或者我正在考虑使用JS或jQuery等来获取所需的目录,以某种方式将其转换为JSON对象,使用AJAX将其发布到另一个页面然后在其他页面中获取JSON并将其解码为CSV格式,然后可以作为文件传递给用户。
我只是认为这种JS方法会更快,如果我可以使它更通用,那么它可以采用任何带有类的表,例如“report”并将其转换为用于创建CSV的JSON对象我可以轻松地在他们让我写的数百份报告中重复使用这段代码。
有没有人有一个JavsaScript代码或者jQuery可以采用任何格式的表(它有一个带有列标题的thead,带有主要内容的t)并将其编码为JSON或JS对象以便发布到另一个页面然后,我可以对其进行解码并将其作为CSV文件输出?
以下是其中一个报告的屏幕截图
答案 0 :(得分:1)
问题的可能解决方案可能是在请求显示给定报告的页面时为每个报告生成CSV格式的数据版本。 (每个报告仅查询一次数据库。)以预期格式在响应中发回数据,以将其显示在表中,并将CSV文件保存到服务器上的临时位置。
这样,您可以在表'download CSV'附近放置一个链接,该链接将指向现有文件。它将避免必须为一个报告查询两次相同的数据,或者必须将相同的数据发送到服务器和客户端之间的往返。
答案 1 :(得分:0)
Javascript没有提供将文本保存到文件的方法,因此您仍然需要执行该服务器端,即通过您已经建议的AJAX。
使用jQuery,您可以执行类似的操作(未经测试),并通过AJAX请求发送。
Support for string view arguments to url() is deprecated and will be removed in Django 1.10 (got recipes.views.index). Pass the callable instead.
url(r'^$', 'recipes.views.index'),
但是我不认为这是更好的方式,因为它仍然是用户输入的。我可以在POST中放入一些随机数据并获得CSV作为回报。
更好的方法是缓存您已有的数据,并在请求时根据缓存的数据创建CSV文件。