1

我希望 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,如果表单无效,返回错误页面
4

1 回答 1

1

试试这个 jquery 插件,它允许下载类似 Ajax 的文件

于 2012-07-07T22:43:46.233 回答