jQuery プラグインを Ajax 関数と統合して Django フォームを投稿する方法がわかりません。アップロードするファイルという 1 つのフィールドだけを扱う例を見てきました。しかし、フォームに他のフィールド (テキストボックス、選択など) が含まれている場合はどうなるでしょうか?
これが私のhtmlフォームです(ドロップダウンリストとアップロードするファイルがあります):
<form id="import_form" class="form-horizontal" method="post" enctype="multipart/form-data">{% csrf_token %}
{{ form.non_field_errors }}
<div id="fileToImportChoice" class="fieldWrapper">
{{ form.fileToImport.errors }}
{{ form.fileToImport }}
</div>
<div id="file_to_import" class="fieldWrapper">
{{ form.csvFile.errors }}
{{ form.csvFile }}
</div>
<input type="button" id="import_button" value="IMPORT" onclick="javascript:display_message('{% url import %}', document.getElementById('import_form'))" />
</form>
これが私のjquery関数です:
function display_message(link, form)
{
var datastring = $(form).serialize();
$.ajax(
{
url: link,
type: 'POST',
dataType: 'json',
enctype: "multipart/form-data",
data: datastring,
success: function(result)
{
//form not valid -> displays errors
if (result.form_errors)
{
//append current errors to the html form
errors=result.form_errors
for (var key in errors)
{
$("#"+key+"_errors").html('<ul class="errorlist"><li>'+errors[key]+'</li></ul>');
//~ alert(key+': '+errors[key]);
}
}
else
{
}
}
});
}
最初の質問: ファイルの名前をdatastring
変数に挿入する必要がありますか? 今のところ、フォーム エラーを表示するたびに、csvFile
以前にアップロードするファイルを選択した場合でも、Django は自分が空であると不平を言います。プラグインがなくても普通だと思います。右?
さて、私の主な質問: jQuery プラグインを関数に統合する方法は? と呼ばれる単純なものを見てきましたSimple-Ajax-Uploader
。使用方法の例を次に示します。
var uploader = new ss.SimpleUpload({
button: $('#uploadBtn'), // upload button
url: '/uploadhandler', // URL of server-side upload handler
name: 'userfile', // parameter name of the uploaded file
onSubmit: function() {
this.setProgressBar( $('#progressBar') ); // designate elem as our progress bar
},
onComplete: function(file, response) {
// do whatever after upload is finished
}
});
最後に...私のフォームの他のデータと一緒にファイルデータを送信する方法は? 私の考えは、関数でプラグインを呼び出してから、ビューに投稿するすべてのデータを含む変数をdisplay_message
更新することです。datastring
もしそうなら、どのように?
編集:シンプルなプラグイン
を探しています。アップロードするファイルは 1 つだけで、カスタム CSS は必要ありません。そして、私はそれを移植したいです(したがってHTML5
、FormData
除外されます)。