parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

JsHTTPRequest - уменьшение картинок

DivineArtS 08.12.2007 00:04 / 08.12.2007 00:05

Ребята - вот возникла такая идея: в тексте како-го либо дива находить все картинки и те, что превышают установленную длину или ширину - уменьшать до определенных размеров и показывать не их огромные оригиналы, а уменьшенные копии. С самим уменьшением понятно - будем делать через внешний хтмл. только вот вышла загвоздка в ЯваСкрипте и тут я застрял. А проблема вот в чем - я запускаю поиск всех тэгов img в div-е - скрипт их находит, но при переборе значений через JsHttpRequest посылается только последний src. Не могу найти причину и решение! помогите с отладкой?
<div id="con">
<img src="/templates/trinity/i/video_btn.png" width="101" height="25">
<img src="/templates/trinity/i/video_btn.png" width="102" height="25">
<img src="/templates/trinity/i/video_btn.png" width="103" height="25">
<img src="/templates/trinity/i/video_btn.png" width="104" height="25">
</div>
                <script language="JavaScript" src="/js/JsHttpRequest.js"></script>

<script>
	if (document.getElementsByTagName) {
		var images = document.getElementById('con').getElementsByTagName('img');
		for (var i=0;i<images.length;i++) {
			var image = images[i];
				if (image.getAttribute('src')){
				if (image.getAttribute('width')) { var width=image.width^;}
				if (image.getAttribute('height')) { var height=image.height^;}
				if(width>height){maxSide='width'^;} else {maxSide='height'^;}
				var maxSide^;
var curdir;
				curdir= image.src^;
				var destpath= curdir.substring(0,curdir.lastIndexOf('/')+1)^;
				var mainString= destpath
				var replaceStr = "\\/"
				var delim = "/g"
				var regexp = eval("/" + "\\/" + delim)
				var newvar=mainString.replace(regexp, replaceStr)
				regexp= eval('/\\' + newvar + delim)
				var filename=curdir.replace(regexp, "")
					var req = new JsHttpRequest()^;
req.onreadystatechange = function() {
	if ( req.readyState == 4 ) {
		if ( req.responseJS ) {
		alert(req.responseJS.dpath)^;
		//var sc_req_image = new Image();
		image.src = req.responseJS.dpath
		image.height=40^;
			image.width=30^;
			image.onclick=function(){alert('idiots outside')^;}
		
		}
	}
}
// disable caching
req.caching = false^;
// prepare object
req.open(null, '/load.html', true)^;
				
				// показывает результат перебора всех значений
				document.write('<font color="black">'+destpath+' width='+width+' heght='+height+'<br>'+maxSide+' '+destpath+' '+filename+'</font><br>')^;
// а это посылает последнее и возвращает только последний результат
req.send( { dpath: destpath, side: maxSide, img: curdir, fname: filename } )^;

  
		}}
	}
</script>
это был код запускающий все это
@USE
JSHttpRequest.p
MySqlComp.p


@main[]
$oSql[^MySqlComp::create[$connect_string;$.bDebug(1)]]
^oSql.server{
		^rem{ *** decode input data *** }
		$hRequest[^JSHttpRequest:decodeRequest[]]
		^rem{ *** set vars from decoded data *** }
		$sPath[$hRequest.dpath]
		$sName[$hRequest.fname]
		$sImg[$hRequest.img]
        $sMside[$hRequest.side]


^if(def $sPath){^JSHttpRequest:printResponse[;$.dpath[${sPath}_thumb_${sName}]$.fname[$sName]$.img[$sImg]$.side[$sMside]]
}
А этот - бэкэнд (я не стал пока заморачиваться - по идее здесь и присутствует уменьшение картинки и ссылка на _thumb_imagename.jpg посылается обратно и уменьшенная картинка загружается с сылкой на chromeless window с оригиналом. а если thumb уже есть - то просто посылается его адрес. но сейчас не суть - это ерунда.) А весь гвоздь в первом куске кода: даже таймер ставил между кругами цикла- не помогало.
Есть продолжение моего решения или альтернативный ход?
спасибо за совет заранее

  • JsHTTPRequest - уменьшение картинок, DivineArtS 08.12.2007 00:04 / 08.12.2007 00:05