Получение кода состояния 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 из ответа.