|
|
|
|
|
для: kvins
(19.07.2011 в 09:55)
| | Вопрос какой-то дурацкий... честное слово.
Даже и не знаю - как ответить.
Имеете:
Б* - браузер на пользовательском компьютере
К* - кеш Б*
С* - ваша страница, загруженную в Б*
Ф* - форма загрузки картинки на С*
И* - скрытый ифрейм на С*
М* - место на С*, где должна будет отобразиться загруженная картинка
Х* - хост (сервер), куда будет загружаться картинка
Порядок действий:
1. Пользователь выберет у себя на диске картинку и просабмитит Ф*.
2. Данные Ф* уйдут на Х*, куда и загрузится картинка пользователя.
3. Окончание работ на Х* отразится в И*, который указан таргетом в Ф* в виде помещения туда картинки уже с Х*. Тем самым картинка с Х* попадёт в К*
4. Окончание загрузки И* просигнализирует скрипту, что картинку из К* можно помещать в нужное М*
Отсюда следует, что:
1. результатом работы PHP-программы должна быть отдача в браузер загруженной на сервер картинки. Т. е. последние строки PHP-программы должны быть такими (для варианта GIF-файла):
...
$image = ImageCreateFromGIF ("сформированный путь к файлу на сервере");
header ("Content-type: image/gif");
Imagegif ($image);
ImageDestroy ($image);
?>
|
2. В форме на кнопке сабмита надо прописать:
<input id='zagr2' type="submit" name="send" value="загрузить" onclick="GLB = 1">
| Этим мы отсекаем первое срабатывание загрузки в ифрейм (см. вариант ПЕРВЫЙ в моём предыдущем разъяснении)
3. В теге ифрейма надо прописать:
<iframe id="rFrame" name="rFrame" style="display: none" onload="if (self.GLB) myFunc ()">
| Этим мы запускаем функцию после загрузки в ифрейм сохранённой на сервере картинки.
4. Страница должна иметь место под картинку. Логичнее всего иметь её в виде невидимого тега IMG:
<img id="myPic" style="visibility: hidden">
|
5. Функция myFunc () будет иметь тогда простейший вид:
function myFunc ()
{
var HRF = window.frames ['rFrame'].document.images [0].href;
document.getElementById ('myPic').href = HRF;
document.getElementById ('myPic').style.visibility = 'visible';
}
|
Это - в самом первом приближении... | |
|
|
|
|
|
|
|
для: АЯ
(17.07.2011 в 20:33)
| | а можете показать как пользоваться onload ? и куда загружать новую картинку в iframe или в обычный div с каким нить клаcсом или id из css | |
|
|
|
|
|
|
|
для: kvins
(17.07.2011 в 18:51)
| | Совет Вы получили не совсем точный.
Поясняю.
Если Вы пропишете в HTML-коде
<iframe style="display: none" onload="myFunc ()"></iframe>
| , то функция myFunc () будет вызвана сразу, как только парсер браузера при загрузке страницы дойдёт до закрывающего тега </iframe>. Сиречь у Вас будет ЛИШНИЙ (Вам ненужный) вызов функции. И этот ненужный вызов функции произойдёт по-любому - даже если Вы совершенно НИЧЕГО не пропишете в атрибуте SRC ифрейма (или даже если Вы вовсе этот атрибут не укажете). Браузер автоматически грузит в ифрейм страницу "about:blank", по окончании загрузки которой и происходит событие onload.
Чтобы "отсечь" это лишнее срабатывание, существует два способа:
ПЕРВЫЙ: создать глобальную переменную-флаг со значением, например, равным единице var GLB = 1. И в вызываемой функции myFunc () сделать проверку флага. Если он равен единице, значит - это первый лишний вызов, меняем значение флага на ноль и выходим из функции - if (GLB) {GLB = 0; return}. Таким образом, обрабатываться будут второй и последующие вызовы функции (когда переменная GLB будет равна нулю).
ВТОРОЙ: не прописывать в теге <iframe> инструкцию вызова функции по событию onload, а назначить этот вызов скриптом, после загрузки родительской страницы (методами attachEvent для MSIE и addEventListener для Mozilla).
"Советчик", который дал Вам выше "совет", видимо, что-то где-то слышал о проблемах с "лишним" срабатыванием onload и о том, что это дело решается "динамически" (скриптом то есть - см. способ ВТОРОЙ), вот он и брякнул, что ВЕСЬ сам ифрейм надо создавать динамически. | |
|
|
|
|
|
|
|
для: kvins
(17.07.2011 в 18:51)
| | С помощью JavaScript, в момент когда отправляете форму, скрипт создает фрейм, отправляет через него файл и прочее, вы с серверного скипта отправляете во фрейм ответ успешности загрузки файла..., а на клиенте отлавливаете его(ответ) и дальше делаете что вам нужно. :) | |
|
|
|
|
|
|
|
для: Emm
(16.07.2011 в 00:58)
| | а динамически это как? | |
|
|
|
|
|
|
|
для: kvins
(15.07.2011 в 12:09)
| | Поставьте onload на фрейм, только скрытый фрейм желательно создавать динамически. | |
|
|
|
|
|
|
| помогите пожалуста с загрузкой файла
ну вот я отправил картинку в базу данных с этим кодом и как теперь мне сделать callback функцию чтоб обновленая фотография загрузилась? а то я читал в инете там столько лишнего пишут что не поймешь нечего.
к файлам подключен jquery
файл index.php
<div class='upload_ava'> выберите файл
<iframe id="rFrame" name="rFrame" style="display: none">
</iframe>
<form enctype="multipart/form-data" target="rFrame" action="load_image.php" method="POST">
<input id="zagr" name="upload" type="file" />
<input id='zagr2' type="submit" name="send" value="загрузить" />
</form></div> | |
|
|
|
|