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

Ajax のようなファイルのダウンロードを可能にするこの jquery プラグインを試してください

于 2012-07-07T22:43:46.233 に答える