как узнать работает ли XMLHttpRequest.send ()

я используюXMLHttpRequest отправить файл изjavascript код дляdjango viewМне нужно определить, был ли файл отправлен или произошла какая-то ошибка. Я использовал jquery для написания следующего javascript.

В идеале я хотел бы показать пользователю сообщение об ошибке, что файл не был загружен. Есть ли способ сделать это вjavascript?

Я пытался сделать это, возвращаяsuccess/failure Сообщение отdjango view , положивsuccess/failed message какjson и отправив обратно сериализованный JSON изdjango view. Для этого я сделалxhr.open() non-asynchronous, Я пытался напечататьxmlhttpRequest Объект & APOS; sresponseText .Отель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 & # xED; cioMatt & # xE9;

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');
          }
       }
    }
 Fabrício Matté04 июн. 2012 г., 06:07
При условии вашегоxhr объект возвращает ответ, он должен содержатьstatus а такжеreadyState свойства также. Пытатьсяconsole.logчтобы убедиться в этом. знак равно
 damon04 июн. 2012 г., 06:05
прости мое невежество, если при написании файлов в представлении django происходит сбой и возникает ошибка сервера (500), могу ли я обнаружить это, используяxhr.readyState==4 && xhr.status==500 ?
 damon04 июн. 2012 г., 06:18
спасибо @ Fabr & # xED; cioMatt & # xE9; , Я обновил вопрос, как я получил это работает .. Если вы можете преобразовать вышеупомянутый комментарий в ответ, я могу принять его
 Fabrício Matté04 июн. 2012 г., 05:52
xhr.readyState==4 && xhr.status==200 не достаточно?

Ответы на вопрос(2)

Решение Вопроса

XMLHttpRequest объекты содержатstatus а такжеreadyState свойства, которые вы можете проверить вxhr.onreadystatechange событие, чтобы проверить, был ли ваш запрос успешным.

 22 янв. 2016 г., 22:16
ответ дополнен рабочим фрагментом кода в конце.

xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState === 4) {
    var response = JSON.parse(xmlhttp.responseText);
      if (xmlhttp.status === 200 && response.status === 'OK') {
         console.log('successful');
      } else {
         console.log('failed');
      }
  }
}

Ваш ответ на вопрос