Wie finde ich heraus, ob XMLHttpRequest.send () funktioniert hat?

ich benutzeXMLHttpRequest um eine Datei von zu sendenjavascript Code zu einemdjango viewIch muss feststellen, ob die Datei gesendet wurde oder ob ein Fehler aufgetreten ist. Ich habe jquery verwendet, um das folgende Javascript zu schreiben.

Im Idealfall möchte ich dem Benutzer eine Fehlermeldung anzeigen, dass die Datei nicht hochgeladen wurde. Gibt es eine Möglichkeit, dies in zu tunjavascript?

Ich habe versucht, dies zu tun, indem ich a zurückgebesuccess/failure Nachricht vondjango view setzen diesuccess/failed message wiejson und zurücksenden des serialisierten json von derdjango viewDafür habe ich das gemachtxhr.open() non-asynchronous. Ich habe versucht, die auszudruckenxmlhttpRequest Objekt istresponseText .Dasconsole.log(xhr.responseText) zeigt an

response= {"message": "success"}

Was ich mich frage, ist, ob dies der richtige Weg ist, dies zu tun. In vielen Artikeln fand ich die Warnung, dass

Die Verwendung von async = false wird nicht empfohlen

Gibt es also eine Möglichkeit herauszufinden, ob die Datei gesendet wurde, während sie aufbewahrt wird?xhr.open() asynchron?

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

Meinedjango view extrahiert Dateien aus Formulardaten und schreibt sie in einen Zielordner.

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

BEARBEITEN:

Ich habe das mit Hilfe von @ FabrícioMatté zum Laufen gebracht

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');
          }
       }
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage