【问题标题】:Django jQuery Ajax form: download a file or render the erroneous formDjango jQuery Ajax 表单:下载文件或呈现错误的表单
【发布时间】:2012-05-22 08:18:44
【问题描述】:

我希望 Django 创建的表单能够被 jQuery/Ajax 提交;如果成功,我希望下载一个文件,如果表单无效,我希望返回我的 Django 表单。

我试图像这样“劫持”Django 表单以将其变成 jQuery/Ajax 的东西: (javascript代码)

form.submit(function(e) {
  e.preventDefault();
  $.ajax({
      data: form.serialize(), // form data
      type: form.attr('method'),
      url: form.attr('action'),
      success: function(data, textStatus, jqXHR) {
          var ctype = jqXHR.getResponseHeader('Content-Type');
          if (ctype == 'text/html') {
              $('#div_where_my_form_is').html(data);
          }
          else if (ctype == 'text/csv') {
              // ???? my problem is here
          }
      }
  });
});

我的Django视图代码是这样的:

# (if the form is invalid I return it (simple template containing only the form))
# if valid:
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=filename.csv'
writer = csv.writer(response, delimiter=';')
writer.writerow(['...stuff written here...'])
return response

所以我的文件是动态创建的 CSV,这可能是需要注意的重要事项。

看看我如何在我的 jQuery 代码中使用 jqXHR 对象来检查返回的内容类型(欢迎任何更好的做法)。我的问题是,在成功的情况下,我无法让 jQuery 理解这是一个正在返回的文件,应该下载它。那可能吗? jQuery 只是将数据视为文本。

可能的解决方法:

  • 进行第一次 ajax 调用以检查表单,如果可以,则进行“正常”(非 ajax)调用以下载文件
  • 忘记ajax,如果表单无效,返回错误页面

【问题讨论】:

    标签: ajax django jquery django-forms


    【解决方案1】:

    试试 this jquery plugin 它允许下载类似 Ajax 的文件

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2011-11-17
      • 2016-03-09
      相关资源
      最近更新 更多