3

我正在使用 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的工作。你对此有什么想法吗?

4

0 回答 0