Подтвердить что ты не робот

Получение кода состояния HTTP из загруженного iframe с помощью Javascript

Я использовал плагин jQuery Form для отправки асинхронной формы. Для форм, содержащих файлы, он копирует форму в скрытый iframe, отправляет ее и копирует содержимое iframe. Проблема в том, что я не могу понять, как найти, какой код статуса HTTP был возвращен сервером. Например, если сервер возвращает 404, данные из iframe будут скопированы как нормальные и будут обрабатываться как регулярный ответ.

Я пытался прокручивать объекты iframe, ищущие какой-то атрибут status_code, но не смог найти ничего подобного.


Функция $.ajax() не может использоваться, поскольку она не поддерживает загрузку файлов. Единственный способ асинхронной загрузки файлов, о которых я знаю, - это использование скрытого метода iframe.

4b9b3361

Ответ 1

Вы не можете получить заголовки страниц JS, но вы можете отличить ошибку от успеха: Попробуйте что-то вроде этого:

<script type="text/javascript">

    var uploadStarted = false;
    function OnUploadStart(){            
        uploadStarted = true;
    }

    function OnUploadComplete(state,message){       

       if(state == 1)
        alert("Success: "+message);     
       else
         if(state == 0 && uploadStarted)
            alert("Error:"+( message ? message : "unknow" ));
    }   

</script>


<iframe id="uploader" name="uploader" onload="OnUploadComplete(0)" style="width:0px;height:0px;border:none;"></iframe>

<form id="sender" action="/upload.php" method="post" target="uploader" enctype="multipart/form-data" onsubmit="OnUploadStart()">
<input type="file" name="files[upload]"/>
<input type="submit" value="Upload"/>
</form>

На стороне сервера:

/*
  file: upload.php
*/
<?php 

   // do some stuff with file       

  print '<script type="text/javascript">';
  if(success)
     print 'window.parent.OnUploadComplete(1,"File uploaded!");';
  else
     print 'window.parent.OnUploadComplete(0, "File too large!");';
  print  '</script>';
?>

Ответ 2

Вы не можете получить код статуса HTTP из загруженного "iframe" напрямую. Но когда произошла ошибка HTTP, сервер ничего не вернет "iframe". Так что iframe не доволен. вы можете проверить тело iframe, когда тело iframe пуст, используйте ajax с тем же URL-адресом, чтобы получить ответ от сервера. Затем вы можете получить код статуса http из ответа.