【问题标题】:How to send checked checkboxes in request to server - automatically downloading file如何在请求中向服务器发送选中的复选框 - 自动下载文件
【发布时间】:2015-03-02 18:46:50
【问题描述】:

我希望在请求中向服务器发送选中的复选框(例如,在我的情况下是 Django),然后作为响应自动下载文件?我对常见的食谱、建议或简单示例感兴趣。据我所知,由于隐私原因,Ajax 和 JS(JQuery) 通常没有解决方案。还是我误会了?

我的想法如何实现:

HTML:

<a id="btn" href="#">Download</a>
...
<input class="select-row" type="checkbox" data-row-id="{{ item.id }}"/>

JS:

$( '#btn' ).on('click', function() {
        var checkedRows = [];
        $( '.select-row:checked' ).each(function() {
            checkedRows.push( $(this).data('row-id') );
        });
        $.ajax( {
            type: "POST",
            url: "/request/to/view/",
            data: {
                passed_rows: checkedRows,
            },
            async: false,
        } ).done( function() {
            console.log('The archive is downloaded.');
        } )
    });

【问题讨论】:

  • 嗯,您可以在change 的复选框中添加一个事件,然后将浏览器重定向到下载链接。这样,在您选中复选框后将触发下载。这个想法听起来如何?如果你愿意,我可以帮你举个例子。
  • 是的,非常感谢您。我用一些基本代码编辑了我的帖子,因为我可以看到这个问题的决定。想法,如果我猜对了 - 我选中了复选框,然后单击按钮,它将有关选中选项的信息发送到 django 视图,然后从视图创建自动下载,在我的情况下,使用复选框选项标识的文件进行存档。

标签: javascript jquery ajax django download


【解决方案1】:

这是我的意思的一个例子:

HTML:

<form>
   <input type="checkbox" name="file" value="Document1">Document1<br>
   <input type="checkbox" name="file" value="Document2">Document2<br>
   <input type="checkbox" name="file" value="Document3">Document3
</form>

jQuery:

$('input[type="checkbox"]').on('change', function() {
   if (this.checked) {
      var fileToDownload = this.getAttribute('value');
      $.ajax({
         url: '/server-side'
         data: { file: fileToDownload },
         success: function(downloadUrl) {
             window.redirect = downloadUrl;
         }
      });
  }
}

我没有测试过代码。

【讨论】:

  • 我添加了我尝试做的事情,并与您的解决方案进行比较。我在这行“成功:函数(downloadUrl){window.redirect = downloadUrl;}”中遇到了麻烦?我得到状态码 200 但我没有自动下载文件。如果我将 cURL 复制到终端并执行“cURL > output.zip”,我会得到文件。这是浏览器政策?我必须使用 window.redirect 来避免它?感谢您的帮助,安德烈
  • 如果您执行console.log(downloadUrl) 会显示什么?
  • 有下载文件的正文:'row.xls>���...'。但文件没有下载
  • 不不,您必须发送文件的URL 而不是文件的内容。重定向将触发下载,(例如/files/your-file.xls
猜你喜欢
  • 2020-04-08
  • 2020-04-18
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多