cómo averiguar si XMLHttpRequest.send () funcionó

estoy usandoXMLHttpRequest para enviar un archivo desdejavascript código para undjango viewNecesito detectar si el archivo ha sido enviado o si ocurrió algún error. Usé jquery para escribir el siguiente javascript.

Idealmente, me gustaría mostrarle al usuario un mensaje de error que indica que el archivo no se cargó. Hay alguna manera de hacerlo enjavascript?

Traté de hacer esto devolviendo unsuccess/failure Mensaje dedjango view , poniendo elsuccess/failed message comojson y devolver el json serializado desde eldjango view.Para esto, hice elxhr.open() non-asynchronous. Intenté imprimir elxmlhttpRequest objetosresponseText .Losconsole.log(xhr.responseText) muestra

response= {"message": "success"}

Lo que me pregunto es si esta es la forma correcta de hacerlo. En muchos artículos, encontré la advertencia de que

No se recomienda usar async = false

Entonces, ¿hay alguna manera de averiguar si el archivo ha sido enviado, manteniendoxhr.open() ¿asincrónico?

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

Midjango view extrae el archivo de los datos del formulario y lo escribe en una carpeta 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:

Conseguí esto trabajando con la ayuda 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');
          }
       }
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta