将数据参数(不是查询参数)提供给 window.location.href ?创建动态文件

Give data parameters (not query params) to window.location.href ? To create a dynamic file

本文关键字:参数 href location window 创建 文件 动态 数据 查询      更新时间:2023-09-26

我的目标是从Angularjs处理的动态内容中下载csv文件。该文件是由Django在服务器端构造的。

使用 Django 获取文件很容易。我们只需要一个视图来返回一个 HttpResponse (doc)。在客户端,我可以通过使用 $window.location.href 更改浏览器的 url 来获取它。

如果我有一些参数,我可以将它们作为查询参数提供给 window.location with search(Mozilla doc)。

但是,我

必须将大量数据传递给服务器,因此我无法使用查询参数。(我受到网址最大长度的限制)。

使用 AngularJS 的 $http ,我们可以为 GET 设置更多的配置,包括数据参数:doc。此数据是"作为请求消息数据发送",它没有编码到url。我想使用它。

因此,如果我可以使用$window.location.href调用设置此数据,我的 pb 将得到解决。可能吗?

如果我用 Angular 的 $http 触发 GET,Django 的HttpResponse不会被解释为响应,它被拦截为success子句中的数据。我怎样才能使用它?

您是否看到另一种创建和下载动态文件的策略?

编辑:我用这个来获取csv文件。

其他策略思路:

  • 创建一个文件服务器端并返回其URL(Django:管理文件)
  • 我们可以使用表单。不过,这似乎确实是最简单的。

非常感谢 !

如果要根据参数从服务器请求数据,则应将它们作为GET查询参数发送,但是,如果发送大量参数,则应在GET请求正文$http data字段)中发送它们。Angular 适合处理 JSON,所以如果你必须处理其他数据(.XML例如 CSV),你必须将其转换为 JSON。Angular 在 $http config 对象中提供了一个transformRequest和一个transformResponse函数(见这里)来做到这一点(不过你必须自己编写逻辑)。

$window.location.href 不合适,因为它将浏览器窗口重定向到指定位置(通常需要一些 html),这将返回数据,但您无法在 JS/Angular 上下文中与之交互。

我强烈建议您使用$http.get并根据需要转换数据。也许您找到了一个为您处理转换的库。