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

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

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


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

2 ответа

Вы не можете получить заголовки страниц с помощью 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>';
?>

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

Другие вопросы по тегам