2015-03-02 50 views
0

有人可以帮我解决这个问题:如何在请求到服务器发送选中的复选框(例如,它是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.'); 
     }) 
    }); 
+0

嗯,你可以添加一个事件到'change'复选框,然后将浏览器重定向到下载链接。这样,检查复选框后,下载将触发。这个想法听起来如何?如果你愿意,我可以帮你做个例子。 – 2015-03-02 18:52:28

+0

是的,非常感谢你。我用一些基本代码编辑了我的帖子,因为我可以看到这个问题的决定。想法,如果我得到你的权利 - 我检查复选框,然后单击按钮,它将有关检查选项的信息发送到Django视图,然后从视图响应创建自动下载,在我的情况下,存档与复选框选择标识的文件。 – jwshadow 2015-03-02 19:13:43

回答

0

这里是我所彪一个例子:

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; 
     } 
     }); 
    } 
} 

我没有测试过的代码,但是这是我的意思了。此解决方案是否适合您的需求?

让我知道,欢呼!

+0

我添加了我试图做的,并与您的解决方案进行比较。我在这行'trouble:function(downloadUrl){window.redirect = downloadUrl;}'的麻烦?我得到状态码200,但我没有自动下载文件。如果我将cURL复制到终端并执行'cURL> output.zip',我会得到该文件。这是浏览器政策?我必须使用window.redirect来避免它?感谢您的帮助,Andrei – jwshadow 2015-03-02 20:07:43

+0

如果您执行'console.log(downloadUrl)'它显示了什么? – 2015-03-02 20:16:15

+0

有下载文件的主体:'row.xls> ...'。但文件没有下载 – jwshadow 2015-03-02 20:29:46

相关问题