私は django 1.5 + Mezzanine + django-ajax-upload-widget を使用しています。django-ajax-upload-widget に問題があります。
そのため、フォームでファイルを選択しようとすると、アップロード エラーが発生します。私が理解しているように(jsデバッガーを使用して)-問題は、jQueryがエラーハンドラーを使用して成功した応答を処理することです。
ajaxアップロードを処理するビューは次のとおりです。
@csrf_exempt
@require_POST
def upload(request):
form = UploadedFileForm(data=request.POST, files=request.FILES)
if form.is_valid():
uploaded_file = form.save()
data = {'path': uploaded_file.file.url,}
return HttpResponse(simplejson.dumps(data))
else:
return HttpResponseBadRequest(simplejson.dumps({'errors': form.errors}))
Pythonデバッガーも試したので、ファイルをアップロードすると次の行が実行されます。
return HttpResponse(simplejson.dumps(data))
つまり、ファイルが正常にアップロードされたことを意味します(宛先フォルダーも確認しました-このファイルが含まれています)。私が理解しているように、使用HttpResponse
すると、リクエストのステータスは200になります。そのため、jQuery はerror
の代わりにハンドラを実行しsuccess
ます。そう。これは、jQuery がデータを処理しようとすると問題が発生する可能性があることを意味しますが、js コードは次のとおりです。
$.ajax(this.$element.data('upload-url'), {
iframe: true,
files: this.$element,
processData: false,
type: 'POST',
dataType: 'json',
success: function(data) { self.uploadDone(data); },
error: function(data) { self.uploadFail(data); }
});
それで、processData: false
ここでは処理はありません。
どう思いますか - 問題の原因は何ですか? そして、それを修正する方法は?
添加:
エラーハンドラーを次のように変更しました
AjaxUploadWidget.prototype.uploadFail = function(jqXHR, textStatus, errorThrown){
if(this.options.onError) {
this.options.onError.call(this);
} else {
console.log('Upload failed:');
console.log(jqXHR, textStatus, errorThrown);
}
};
そのため、js コンソールには「parsererror」と表示されます。
問題が解決しました
console.log(jqXHR.responseText);
エラーハンドラーで試してみると、次のように表示されます。
if (window.top.ripple) { window.top.ripple("bootstrap").inject(window, document); }{"path": "/static/media/ajax_uploads/c351360b8aa7417b89f51cdd9e9057ae-Koala.jpg"}
しかし、私はこれだけを見なければなりません:
{"path": "/static/media/ajax_uploads/c351360b8aa7417b89f51cdd9e9057ae-Koala.jpg"}
そこで、Chrome で Ripple プラグインをオフにすると、すべて正常に動作します o_O :-)
しかし、一部のプラグインがフロントエンド js の作業を中断する可能性があるのは非常に奇妙です。これについて何か考えはありますか?