como descobrir se XMLHttpRequest.send () funcionou

estou usandoXMLHttpRequest para enviar um arquivo dejavascript código para umdjango view.Eu preciso detectar, se o arquivo foi enviado ou se algum erro ocorreu.Eu usei jquery para escrever o seguinte javascript.

Idealmente, gostaria de mostrar ao usuário uma mensagem de erro de que o arquivo não foi carregado.Existe alguma maneira de fazer isso emjavascript?

Eu tentei fazer isso, retornando umsuccess/failure Mensagem dedjango view , colocando osuccess/failed message Comojson e enviando de volta o json serializado dodjango viewPara isso, eu fiz oxhr.open() non-asynchronous. Eu tentei imprimir oxmlhttpRequest ObjetoresponseText .Oconsole.log(xhr.responseText) shows

response= {"message": "success"}

O que eu estou querendo saber é, se esta é a maneira correta de fazer isso. Em muitos artigos, eu encontrei o aviso de que

Usar async = false não é recomendado

Então, existe alguma maneira de descobrir se o arquivo foi enviado, mantendoxhr.open() assíncrono?

$(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);
}

Minhasdjango Ver extrai o arquivo dos dados do formulário e grava em uma pasta de destino.

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")

EDITAR:

Eu tenho esse trabalho com a ajuda de @ 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');
          }
       }
    }

questionAnswers(2)

yourAnswerToTheQuestion