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

时间:2016-03-10 14:55:30

标签: javascript angularjs django

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

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

如果我有一些参数,我可以使用searchMozilla doc)将它们作为查询参数提供给window.location。

但是我必须将大量数据传递给服务器,所以我不能使用查询参数。 (我受到网址最大长度的限制)。

使用AngularJS'$http,我们可以为GET设置更多配置,包括数据参数:doc。该数据“将作为请求消息数据发送”,它不被编码到URL。我想用它。

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

如果我使用Angular的$http触发GET,则Django的HttpResponse不会被解释为响应,它会被截取为success子句中的数据。我该如何使用它?

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

修改:我去了with this获取csv文件。

其他策略理念:

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您想根据参数从服务器请求数据,您应该将其作为GET 查询参数发送,然而如果您发送了大量参数,则应发送他们在GET 请求正文transformRequest字段)中。 Angular适合处理JSON,因此如果您必须处理其他数据(例如XML,CSV),则必须将其转换为JSON。 Angular在transformResponse配置对象中提供了$http$window.location.href函数(see here)来完成这项工作(您必须自己编写逻辑)。

$http.get不合适,因为它将浏览器窗口重定向到指定位置(通常需要一些html),这会返回数据,但是你无法在JS / Angular上下文中与它进行交互

我强烈建议您使用{{1}}并根据需要转换数据。也许你找到一个为你处理转换的库。