Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

можно ли одним аякс запросом убить двух зайцев

1.8K
10 мая 2011 года
Kama
153 / / 04.05.2006
всем привет,
Суть проблеммы такова,
Я выбираю картинку из базы данных, и вывожу ее пользователю (<img src="index.php?...."), также на том этапе(после выборки из БД мне нужно узнать размер картинки, делаю и это),
как можно отослать браузеру сразу и картинку и размер? Можно ли "пихать доп. данные" в header?
Два аякс запроса будут слишком нагружать сервак, это не правильно, а если записывать в сессию, то она у меня опаздывает иногда, что и понятно. У кого есть какие решения? ::HELP::PLEASE::
244
10 мая 2011 года
UAS
2.0K / / 19.07.2006
Где код отправки данных клиенту и обработки клиентом (браузером)?
По вашей задаче вообще не вижу ничего сложного.
У вас картинки где хранятся? В БД или на жестком диске? И в том, и в другом случае размеры картинки можно получить одним запросом, если база спроектирована прямыми руками. А клиенту отправлять уже JSON:
 
Код:
{
    path: "index.php?....",
    width: 100,
    height: 500
}

В общем, вы дали мало данных, чтобы хоть как-то помочь решить проблему
1.8K
10 мая 2011 года
Kama
153 / / 04.05.2006
Картинки берутся из БД, причем у каздой картинки может быть разный размер, само поле размеров картинок отсутствует.
насчет одного запроса это понятно опять будет запрос к БД вызов функции imagecreatepng и imagex() imagey()...
лишь для того чтобы узнать размеры картинки, а вы как считаете лучше тогда и поля ширины и высоты картинки добавить в БД?
тогда первый запрос будет уходит чтоб получить саму картинку, а второй на получение размеров картинки
244
10 мая 2011 года
UAS
2.0K / / 19.07.2006
Цитата:
тогда первый запрос будет уходит чтоб получить саму картинку, а второй на получение размеров картинки


Я не могу понять - что мешает всё это вернуть в одном запросе? Зачем делать два ajax-запроса? В одном запросе вернуть сразу картинку и её размеры. Я же написал выше.

Цитата:
лучше тогда и поля ширины и высоты картинки добавить в БД?


А тут я без понятия. Надо смотреть на загруженность сайта и потом лишь думать - стоит ли заводить лишние поля или нет.

13
10 мая 2011 года
RussianSpy
3.0K / / 04.07.2006
Можно передать одним запросом и картинку и размер. Например так - картинку передаем в теле ответа, размер передаем в виде кук в НТТР заголовке.
278
10 мая 2011 года
Alexander92
1.1K / / 04.08.2008
А почему нельзя просто отдать изображение, а потом в JS вызвать XMLHttpRequest.getAllResponseHeaders() и выдернуть Content-Length?
274
10 мая 2011 года
Lone Wolf
1.3K / / 26.11.2006
UAS уже все написал. JSON
зачем извращатся с кукисами.. content-lenth?
5
11 мая 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: UAS
А тут я без понятия. Надо смотреть на загруженность сайта и потом лишь думать - стоит ли заводить лишние поля или нет.


На самом деле кэшировать метаданные изображения вполне имеет смысл (размерность, глубина цвета, возможно хэши) - карман они совсем не тянут, и в определенных случаях могут быть полезными.

1.8K
12 мая 2011 года
Kama
153 / / 04.05.2006
Цитата: UAS
Я не могу понять - что мешает всё это вернуть в одном запросе? Зачем делать два ajax-запроса? В одном запросе вернуть сразу картинку и её размеры. Я же написал выше.



да, вопрос таки как раз в этом, просто я не совсем понимаю вот мой код:
.....
header("Pragma: no-cache", true);
header("Cache-Control: no-cache, no-store, must-revalidate", true);
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
exit;

и на этом все, тоесть отправляется только картинка...



а как "засунуть" доп.данные (размер картинки) в headers, как предлагает RussianSpy?

244
12 мая 2011 года
UAS
2.0K / / 19.07.2006
Цитата:
да, вопрос таки как раз в этом, просто я не совсем понимаю вот мой код:


Что это за AJAX? Это обычное отправление картинки браузеру. Здесь и AJAX-а так-то нет. Можно сделать просто <img src="picture.php" />, где в picture.php указать Ваш код.

А если уж делать так, как вы, то послушайте совет Alexander92. Просто добавьте произвольный Header, например, header("Size: 100x200");
Потом приёмником ответа просто прочтите данные указанным выше методом и вытащите размеры.

1.8K
12 мая 2011 года
Kama
153 / / 04.05.2006
всем огромное спасибо, понял.
12
17 мая 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: UAS

Просто добавьте произвольный Header, например, header("Size: 100x200");


Тогда уж лучше X-Size.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог