javascript – 如何找出XMLHttpRequest.send()是否工作

我正在使用 XMLHttpRequest将文件从javascript代码发送到django视图.我需要检测,文件是否已发送,或者是否发生错误.我使用jquery写下列javascript.

理想情况下,我想向用户显示文件上传错误消息.有什么方法可以在javascript中执行此操作吗?

我尝试通过从django视图返回成功/失败消息,将成功/失败的消息作为json并从django视图发送回序列化的json.为此,我使xhr.open()非异步.我试图打印xmlhttpRequest对象的responseText.console.log(xhr.responseText)显示

response= {"message": "success"}

我想知道的是,这是否是正确的方法.在许多文章中,我发现了这样的警告

Using async=false is not recommended

那么,有没有办法找出文件是否被发送,同时保持xhr.open()异步?

$(document).ready(function(){
   $(document).on('change','#fselect',function(e){
            e.preventDefault();
            sendFile();
        });
});

function sendFile(){
   var form = $('#fileform').get(0);
   var formData = new FormData(form);
   var file = $('#fselect').get(0).files[0];
   var xhr = new XMLHttpRequest();
   formData.append('myfile',file);
   xhr.open('POST','uploadfile/',false);
   xhr.send(formData);
   console.log('response=',xhr.responseText);
}

我的django视图从表单数据中提取文件并写入目标文件夹.

def store_uploaded_file(request):
   message='Failed'
   to_return = {}
   if  (request.method == 'POST'):          
      if request.FILES.has_key('myfile'):
         file = request.FILES['myfile']
         with open('/uploadpath/%s' % file.name,'wb+') as dest:
            for chunk in file.chunks():
               dest.write(chunk)
               message="success"
   to_return['message']= message
   serialized = simplejson.dumps(to_return)
   if store_message == "success":
      return HttpResponse(serialized,mimetype="application/json")
   else:
      return HttpResponseServerError(serialized,mimetype="application/json")

编辑:

我在@FabrícioMatté的帮助下得到了这个工作

xhr.onreadystatechange=function(){
       if (xhr.readyState==4 && xhr.status==200){
          console.log('xhr.readyState=',xhr.readyState);
          console.log('xhr.status=',xhr.status);
          console.log('response=',xhr.responseText);

          var data = $.parseJSON(xhr.responseText);
          var uploadResult = data['message']
          console.log('uploadResult=',uploadResult);

          if (uploadResult=='failure'){
             console.log('Failed to upload file');
             displayError('Failed to upload');
          }else if (uploadResult=='success'){
             console.log('successfully uploaded file');
          }
       }
    }

解决方法

XMLHttpRequest对象包含状态和readyState属性,您可以在xhr.onreadystatechange事件中测试,以检查您的请求是否成功.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...