jak się dowiedzieć, czy działa XMLHttpRequest.send ()

ja używamXMLHttpRequest wysłać plik zjavascript kod do adjango view.Czy muszę wykryć, czy plik został wysłany lub czy wystąpił błąd. Użyłem jquery do napisania następującego javascript.

Idealnie chciałbym pokazać użytkownikowi komunikat o błędzie, że plik nie został przesłany. Czy jest jakiś sposób, aby to zrobićjavascript?

Próbowałem to zrobić, zwracając asuccess/failure Wiadomość oddjango view , kładącsuccess/failed message tak jakjson i odesłanie serializowanego jsona zdjango viewNa to zrobiłemxhr.open() non-asynchronous. Próbowałem wydrukowaćxmlhttpRequest obiektresponseText .Powierzchniaconsole.log(xhr.responseText) przedstawia

response= {"message": "success"}

Zastanawiam się, czy jest to właściwy sposób. W wielu artykułach znalazłem ostrzeżenie

Używanie async = false nie jest zalecane

Czy jest jakiś sposób na sprawdzenie, czy plik został wysłany, zachowując jednocześniexhr.open() asynchroniczny?

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

Mójdjango widok wyodrębnia plik z danych formularza i zapisuje go w folderze docelowym.

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

EDYTOWAĆ:

Pracowałem z pomocą @ 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