Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AJAX и php вывод картинки через header() 
:(
    Опции темы
Kr0LiK
Дата 26.1.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.1.2006

Репутация: нет
Всего: нет



Собствено дело в следуйщем есть два файла index.php и loadmap.inc.php 

index.php
Код

<script language="JavaScript">

  var xmlhttp
  var idhttp

function loadXMLDoc(url, xmlid) {
  xmlhttp=null
  idhttp=xmlid

  if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest()
  } else if (window.ActiveXObject) {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
  
  if (xmlhttp!=null) {
    xmlhttp.onreadystatechange=state_Change
    xmlhttp.open("GET",url,false)
    xmlhttp.send(null)
  } else {
    alert("Ваш клиент неподдерживает XMLHTTP.")
  }
}

function state_Change() {

  if (xmlhttp.readyState==4) {
    if (xmlhttp.status==200) {
      document.getElementById(idhttp).innerHTML=xmlhttp.responseText;
    } else {
      alert("Невозможно загрузить:" + xmlhttp.statusText)
    }
  }
}

</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <meta http-equiv="Content-Language" content="en">
    <meta name="Description" content="">
    <meta name="Keywords" content="">
    <meta name="Revisit-After" content="15 days">
    <title></title>
</head>
<body>

<table width="100%" cellspacing="0" cellpadding="0" border="1">
  <tr>
    <td colspan="3" height="70" align="center">
      <input type="button" value="50X50" onclick="loadXMLDoc('loadmap.inc.php?m_width=50&m_height=50', 't_frame')">
      <input type="button" value="100X100" onclick="loadXMLDoc('loadmap.inc.php?m_width=100&m_height=100', 't_frame')">
      <input type="button" value="300X300" onclick="loadXMLDoc('loadmap.inc.php?m_width=300&m_height=300', 't_frame')">
    </td>
  </tr>
  <tr>
    <td width="150" align="left">левая панель</td>
    <td align="center" height="400" id="t_frame">Фрейм загрузки карты</td>
    <td width="150" align="right">правая панель</td>
  </tr>
  <tr>
    <td colspan="3" height="70" align="center">Нижняя панель</td>
  </tr>
</table>
</body>
</html>


и loadmap.inc.php 

Код

<?php
  
  $map_imgwn = $_GET['m_width'];
  $map_imghn = $_GET['m_height'];
  
  $map_img  = array();
  $map_url  = "map/six_desktop_1024.jpg";
  $map_img  = getimagesize($map_url);
  $map_imgo = imagecreatefromjpeg($map_url);
  
  $map_imgw = $map_img[0];
  $map_imgh = $map_img[1];
  
  $map_imgnew  = imagecreate($map_imgwn, $map_imghn);
  //$map_imgname = "./tmp/tmp.png";
  
  imagecopyresized($map_imgnew, $map_imgo, 0, 0, 0, 0, $map_imgwn, $map_imghn, $map_imgw, $map_imgh);
  imagepng($map_imgnew);

  header('Content-type: image/png');
?> 


Ну и вот значит если запускать второй файл, то картинка выводиться нормально все отлично показываеться! а если выводить с помощью AJAX в определеный участок таблицы, то в том месте просто бишет вот такую фигню (?PNG  ) и все что делать в чем причина?

Это сообщение отредактировал(а) Kr0LiK - 26.1.2007, 12:22
PM MAIL WWW ICQ   Вверх
skyboy
Дата 26.1.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



ну так правильно делает, что выводит. ты присылаешь бинарный поток и чесно предупреждаешь: поток содержит данные image/png. А на клиенте javascript забивает на заголовки и как текст вставляет этот бинарный поток в таблицу. Чего ты хотел? чтоб браузер сам создал элемент IMG и в качестве src'a указал ссылку на loadmap.inc.php ?! А с чего это браузеру самодеятельностью заниматься?
PM MAIL   Вверх
Kr0LiK
Дата 26.1.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.1.2006

Репутация: нет
Всего: нет



И как мне поступить что зделать подскажите пожалуйста буду очень признателен!  smile 
PM MAIL WWW ICQ   Вверх
ewolf
Дата 26.1.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



а зачем здесь вообще AJAX?
Просто у картинки подменяй путь к изображению

Код

<script language="JavaScript">

function loadImage(url, id) {
   document.getElementById(id).innerHTML = '<img src="'+url+'">';
}


</script>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <meta http-equiv="Content-Language" content="en">
    <meta name="Description" content="">
    <meta name="Keywords" content="">
    <meta name="Revisit-After" content="15 days">
    <title></title>
</head>
<body>

<table width="100%" cellspacing="0" cellpadding="0" border="1">
  <tr>
    <td colspan="3" height="70" align="center">
      <input type="button" value="50X50" onclick="loadImage('loadmap.inc.php?m_width=50&m_height=50', 't_frame')">
      <input type="button" value="100X100" onclick="loadImage('loadmap.inc.php?m_width=100&m_height=100', 't_frame')">
      <input type="button" value="300X300" onclick="loadImage('loadmap.inc.php?m_width=300&m_height=300', 't_frame')">
    </td>
  </tr>
  <tr>
    <td width="150" align="left">левая панель</td>
    <td align="center" height="400" id="t_frame">Карта</td>
    <td width="150" align="right">правая панель</td>
  </tr>
  <tr>
    <td colspan="3" height="70" align="center">Нижняя панель</td>
  </tr>
</table>
</body>
</html>

PM MAIL ICQ   Вверх
Kr0LiK
Дата 26.1.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.1.2006

Репутация: нет
Всего: нет



Спасибо большое за подсказку! и всетаки как это зделать через AJAX.
PM MAIL WWW ICQ   Вверх
GZep
Дата 26.1.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



Kr0LiK, а зачем вы используете аякс? Разве не проще будет сделать просто вот так?

Добавлено @ 13:06 
Ой, пока писал, меня на 2 поста опередили... smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
ewolf
Дата 26.1.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Kr0LiK, в чем здесь смысл AJAX? Даже если в реальном приложении загружается не только картинка, но и что-то еще, то все равно вывод картинки возможен только через подстановку пути

Это сообщение отредактировал(а) ewolf - 26.1.2007, 13:08
PM MAIL ICQ   Вверх
skyboy
Дата 26.1.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(skyboy @  26.1.2007,  11:33 Найти цитируемый пост)
чтоб браузер сам создал элемент IMG и в качестве src'a указал ссылку на loadmap.inc.php ?! 

создать элемент IMG(var img= document.createElement('img');)
прописать у него атрибут src с указанием на твой loadmap.inc.php(в GET-параметрах к нему будут идти все параметры, которые ты раньше передавал посредством ajax): img.src = "loadmap.inc.php?some=attributes&here";
присоединить картинку к документу(document.getElementsByTagName('body')[0].appendChild(img);)

Добавлено @ 13:12 
Цитата(ewolf @  26.1.2007,  12:07 Найти цитируемый пост)
все равно вывод картинки возможен только через подстановку пути

почему  же? он же уже передавал png-поток через ajax... осталось только уговорить пользователя скопировать текст и сохранить его локально в png-файл...  smile 
PM MAIL   Вверх
Kr0LiK
Дата 26.1.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 11.1.2006

Репутация: нет
Всего: нет



еще вопрос! если выводиш картинку непосредствено через img то картинка кешируеться так! как смостерить чтоб она несохранялась в кеш?
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 26.1.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



В файле loadmap.inc.php  передай следующие загоовки:
Код

header("Content-type: image/png");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
ewolf
Дата 27.1.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Цитата(skyboy @  26.1.2007,  13:11 Найти цитируемый пост)
почему  же? он же уже передавал png-поток через ajax... осталось только уговорить пользователя скопировать текст и сохранить его локально в png-файл...


Браузер не может отображать изображение на странице с html, если ему не указано наличие элемента img с правильным src. Так и следует делать. Чем не устраивает подобный подход я не понимаю
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.