Получение кода состояния HTTP из загруженного iframe с помощью Javascript - PullRequest
47 голосов
/ 30 августа 2008

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

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


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

Ответы [ 2 ]

19 голосов
/ 04 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...