我的目标是从 Angularjs 处理的动态内容中下载 csv 文件。该文件是由 Django 在服务器端构建的。
使用 Django 获取文件很容易。我们只需要一个 View 来返回 HttpResponse ( doc )。在客户端,我可以通过使用 $window.location.href
更改浏览器的 url 来获取它。
如果我有一些参数,我可以使用 search
将它们作为 window.location 的查询参数 ( Mozilla doc )。
但是,我必须将大量数据传递到服务器,因此无法使用查询参数。 (我受到网址最大长度的限制)。
使用 AngularJS 的 $http
,我们可以为 GET 设置更多配置,包括数据参数: doc 。该数据是“作为请求消息数据发送的”,它没有编码到 url 中。我想用它。
因此,如果我可以使用 $window.location.href
调用设置此数据,我的 pb 就会得到解决。这可能吗?
如果我使用 Angular 的 $http
触发 GET,Django 的 HttpResponse
不会被解释为响应,而是作为数据被拦截到 success
子句。我该如何使用它?
您是否看到另一种创建和下载动态文件的策略?
编辑:我去了 with this对于 csv 文件。
其他策略想法:
- 创建文件服务器端并返回其 url ( django: manage files )
- 我们可以use a form 。但这看起来确实是最简单的。
非常感谢!
最佳答案
如果您想根据参数从服务器请求数据,您应该将它们作为 GET 查询参数发送,但是如果您发送大量参数,您应该发送它们位于 GET 请求正文($http data
字段)中。 Angular 适合处理 JSON,因此如果您必须处理其他数据(例如 XML、CSV),则必须将其转换为 JSON。 Angular 在 $http
配置对象中提供了一个 transformRequest
和一个 transformResponse
函数( see here )来做到这一点(你必须编写不过你自己的逻辑)。
$window.location.href
不合适,因为它将浏览器窗口重定向到指定位置(通常需要一些 html),这会返回数据,但您无法进行交互在 JS/Angular 上下文中使用它。
我强烈建议您使用$http.get
并根据需要转换数据。也许您会找到一个可以为您处理转换的库。
关于javascript - 将数据参数(而不是查询参数)提供给 window.location.href ?创建动态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919914/