Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт отображения веса картинки, помогите подправить (https://javascript.ru/forum/misc/57088-skript-otobrazheniya-vesa-kartinki-pomogite-podpravit.html)

VINRARUS 19.07.2015 07:39

Скрипт отображения веса картинки, помогите подправить
 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript">
var zDel = "http://vinrarus.ucoz.net/DDD.png";
var imgas = new Image();
imgas.src = zDel;
var zheight = imgas.naturalHeight;
var zwidth = imgas.naturalWidth;

//А дальше не родной код
var zsize = 0;
  var request;
  request = $.ajax({
    type: "HEAD",
    url: zDel,
    success: function () {
      var zsize = request.getResponseHeader("Content-Length");
      alert(zheight +'x'+ zwidth+'-'+zsize);
    }
  });

     alert(zheight +'x'+ zwidth+'-'+zsize);
</script><BR>БР

ШИИРИНАхВЫСОТА-ВЕС изображения, как видно в 1м сообщении все как нада, но за пределами функции переменная zsize не подхватывается чето. :-?

Бонус:
1) как на ходу байты в килобайты превратить?
2) может как то более грамотно можно обьеденить эти 2 части кода?

VINRARUS 19.07.2015 07:55

Толи они в 2 потока как то обрабатываются...

kostyanet 19.07.2015 08:59

1) поделить на 1024
2) засунуть первую часть кода на место alert() второй части кода

VINRARUS 19.07.2015 10:24

kostyanet,
1) спасибо
2) в первом alert ломаются дополнительно и переменные ширины и высоты, во втором толку нуль

Напоминаю что нужны все 3 рабочие переменные zheight, zwidth, zsize после этого кода.

kostyanet 19.07.2015 11:07

За вас что ли засунуть? Ну, попробую:

var getImageData=function(url,callback){

	var img_data={w:0,h:0,b:0};

	$.ajax({
		type: "HEAD",
		url:url,
		success: function () {
			img_data.b = this.getResponseHeader("Content-Length")/1024;
			var img = new Image();
			img.onload=function(){
				img_data.w=this.width;
				img_data.h=this.height;
				if(callback)
					callback(img_data);
				else
					window.img_data=img_data;
			};
			img.src = url;
		}
	});
};

/* usage */

getImageData('http://vinrarus.ucoz.net/DDD.png',function(d){
	alert(d.w+' '+d.h+' '+d.b);
});

KosBeg 19.07.2015 11:07

Цитата:

Сообщение от VINRARUS
но за пределами функции переменная zsize не подхватывается чето.

наверно тут CORS - кросдоменный аякс запрещен...
поэотму если картинка на домене отличному от текущего - ничего не будет)
а переменные "zheight" и "zwidth" берутся не з ответа аякса, поэтому доступны

kostyanet 19.07.2015 11:11

За

img_data.b = this

не уверен, но верю что жикверя не должна требовать хардкода для обращения к собственному объекту внутри собственной же функции.

Например в колбеке объекта XMLHttpRequest - this - он сам.

kostyanet 19.07.2015 11:13

Цитата:

Сообщение от KosBeg
наверно тут CORS - кросдоменный аякс запрещен.

Судя по химерическим именам переменных дело происходит во внутренностях ю-козы.

KosBeg 19.07.2015 11:22

так работает - но только в пределах домена,
с домена "vinrarus.ucoz.net" нельзя послать запрос на "vinrarus.com" или например "google.com"
PS: это никак не лечится! вариант есть только один - купить гугл и его домен :D
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript">
var zDel = "http://vinrarus.ucoz.net/DDD.png";
var imgas = new Image();
imgas.src = zDel;
var zheight = imgas.naturalHeight;
var zwidth = imgas.naturalWidth;

//А дальше не родной код
var zsize = 0;
  var request;
  request = $.ajax({
    type: "HEAD",
    url: zDel,
    success: function () {
      window.zsize = request.getResponseHeader("Content-Length")/1024;
    }
  });

  alert(zheight +'x'+ zwidth+'-'+zsize);
</script><BR>БР

VINRARUS 19.07.2015 11:44

Цитата:

Сообщение от kostyanet
Судя по химерическим именам переменных дело происходит во внутренностях ю-козы.

Скажу по секрету что дело происходит внутри мобильного телефона через " httpd -p 80 -h /usr/vin/www". ;)
http://192.168.16.2
Но и там и там код работает в равных условиях.
Цитата:

Сообщение от kostyanet
За вас что ли засунуть? Ну, попробую:

совсем не работает :(
Цитата:

Сообщение от KosBeg
так работает - но только в пределах домена

Сам смотри, вес не отображает: http://vinrarus.ucoz.net/index/0-16

KosBeg 19.07.2015 11:51

твою....
<img border="0" align="absmiddle" src="http://vinrarus.ucoz.net/DDD.png">

<script type="text/javascript">
var zDel = "http://vinrarus.ucoz.net/DDD.png";
var imgas = new Image();
imgas.src = zDel;
var zheight = imgas.naturalHeight;
var zwidth = imgas.naturalWidth;

//А дальше не родной код
var zsize = 0;
 var request;
 request = $.ajax({
 type: "HEAD",
 url: zDel,
 success: function () {
 *!*window.*/!*zsize = request.getResponseHeader("Content-Length");
// alert(zheight +'x'+ zwidth+'-'+zsize);
 }
 });

 alert(zheight +'x'+ zwidth+'-'+zsize);
</script><BR>БР
 <!-- <5454> -->

что бы вынести за пределы аякс запроса и сделать переменную глобальной используем "window." а не "var"

VINRARUS 19.07.2015 11:54

Цитата:

Сообщение от KosBeg
твою....

Все верно, мою... ошибку. Я по третьему кругу менял код и видимо ошибся на 3й раз кодом. :D
Исправил, еще раз посмотри, проблема та же.

kostyanet 19.07.2015 11:58

Цитата:

Сообщение от VINRARUS
Сам смотри, вес не отображает: http://vinrarus.ucoz.net/index/0-16

Как выше и было предопределено - все в кишках козы копошится. Поэтому и работает.

kostyanet 19.07.2015 12:01

Цитата:

Сообщение от VINRARUS
совсем не работает

Спорное утверждение. А вот вы с КозБеком натуре мозг компостируете. Там целых две отложеных процедуры, а вы лепите свои алерты как бык поссал.

VINRARUS 19.07.2015 12:05

Цитата:

Сообщение от kostyanet
Спорное утверждение.

Ну вот отдельно страница и для твоего решения: http://vinrarus.ucoz.net/index/0-29

kostyanet 19.07.2015 12:08

Как я и предупреждал надо читать документацию на гэ-квери, ибо

TypeError: this.getResponseHeader is not a function

и еще там синтаксическая ошибка - ищите (может быть и моя, а искать - вам)

SyntaxError: missing ) after argument list - 41:80

kostyanet 19.07.2015 12:13

сделайте как было

var req=$.ajax({...

и внутри вместо this - req. и та самая функция

VINRARUS 19.07.2015 12:16

Сделал. Проверяю на телефонном сервере...

kostyanet 19.07.2015 12:16

Понятно, в суксесь линк будет jqXHR, то есть вместо this - jqXHR

Полностью вот так

Type: Function( Anything data, String textStatus, jqXHR jqXHR )

VINRARUS 19.07.2015 13:45

Очень круто... :-E
На телефонном сервере jquery-1.10.1, а согласно єтой статье "jQuery XMLHttpRequest (jqXHR) появился в библиотеке jQuery в версии 1.5".

Короче продолжу пытки немного позже.

Вот еще есть вариант без куджери вроде.

А с куджери от сюда взял.

KosBeg 19.07.2015 13:59

ну так работает же...
 
Вложений: 1
ну так работает же...
только что тестил на локалке
два файла которые первые попали под руку положил в архив, все работает...
я надеюсь размеры картинки сами прикрутите?

kostyanet 19.07.2015 15:28

Цитата:

Сообщение от VINRARUS
сервере jquery-1.10.1

Если вы не понимаете нишиша в этой лайбе, то за каким юзаете?

VINRARUS 19.07.2015 17:37

Не так оно работает как нужно.
 
Цитата:

Сообщение от KosBeg
ну так работает же...

Ну приведенный мной код изначально работал на локалке. :)
Вот только я сразу указал что переменная с весом файла НЕ работает вне функции.
Мне ведь не сообщение с размером файла нужно, а передача этого размера в переменной дальше по коду весом 48 кб.
Вот ты опять привел пример который вне функции get_filesize ничего делать не может. Я просто думал решение этой задачи простое, а оно вон как запутано. :-?
Цитата:

Сообщение от kostyanet
Если вы не понимаете нишиша в этой лайбе, то за каким юзаете?

В локальной веб-галерее 75 Кб чистого яваскрипта (без учета самой куджери), все заточено именно под эту версию по этому смена на более новую затруднительна.

KosBeg 19.07.2015 18:21

Цитата:

Сообщение от VINRARUS
НЕ работает вне функции

значить превращай переменную в глобальную при помощи "window"
выше уже были примеры

VINRARUS 19.07.2015 22:06

Асинхрон - это зло. :-/
Вот решил задачу таким топорным способом, зато надежно:
getImageData(zDel,function(d){
 //alert(d.w+' '+d.h+' '+d.b);
document.getElementById("ZIZI").innerHTML = '<span id="ZIZI">'+d.b+' Kb</span>'
 
 window.zsize = d.b;
window.zsize = zsize;
});

А с window. я намучался, оно не адекватно как то работало с этим асинхроном унылым.
Теперь я понял что ява кодинг мало чего общего имеет с логически понятными языками програмирования, но тем не менее умение использовать костылей пригодилось даже в этой вражеской среде под названием JS. :lol:

Примите мои соболезнования. :)

kostyanet 20.07.2015 07:53

Кино называется "Тупой и еще тупее".

Цитата:

Сообщение от VINRARUS
Теперь я понял


Ничего так и не поняли. Ваша задача на любом языке была бы описана точно так же. В противном случае - мертвый зависон на все время пока не придет ответ от сервера, а если не придет вообще - то снять задачу можно будет только выпиливанием треда браузера из списка задач в операционке. Вы так хотели что ли?

Потому что у вас там 2 запроса на загрузку ресурса с сервера. Это не то же самое что var a=1; Это то же самое что пойти в магазин, взять товар, постоять в очереди в кассу и вернуться.

Ну расскажите на каком правильном языке эту задачу можно решить как там - логически понятно?

ЗЫ Дело тут не в жабе, а в вебе.

kostyanet 20.07.2015 07:59

При чем тут window? Я применил ради прикола - ежу же понятно нет никакого смысла писать что-то в виндоу после того, как придет ответ сервера. Ну если вы напишите таймер, который через 1 сек будет тыкаться в эту переменную в виндоу и когда там чего-то появится - ура - побежит что-то делать полезное, тогда только. Но так никто не делает.

Я хочу лишь определить для тех кто еще будет читать эту тему и подумает "да как все запущено", что проблема тут не в жабе, а в авторе темы которому лень поскрипеть мозгами.

VINRARUS 20.07.2015 08:51

Цитата:

Сообщение от kostyanet
В противном случае - мертвый зависон на все время пока не придет ответ от сервера

В моем случае этого было бы достаточно так как картинка закэширована еще до вызова этой функции.
Цитата:

Сообщение от kostyanet
Ну расскажите на каком правильном языке эту задачу можно решить как там - логически понятно?

Последовательное выполнение кода.
Ну или возможность вынуть вес файла так же легко как и разрешение изображения (напрямую, а не прописанное в тегах разумеется).
Цитата:

Сообщение от kostyanet
ежу же понятно нет никакого смысла писать что-то в виндоу после того, как придет ответ сервера.

Теперь с уверенностью можно сказать что KosBeg не ёж. :)
Тем не менее он дал буквальный ответ на мой конкретный вопрос, а дальше я уже сам понял что оно малополезно.
Цитата:

Сообщение от kostyanet
Ну если вы напишите таймер, который через 1 сек будет тыкаться в эту переменную в виндоу и когда там чего-то появится - ура

В том и дело что даже через таймаут переменная не работала (точнее работала почему то только в alert, и то не всегда).
Цитата:

Сообщение от kostyanet
что проблема тут не в жабе, а в авторе темы которому лень поскрипеть мозгами.

Ну да, проблема не в деревяном топоре, а в лесорубе. :D
Я ведь поскрепел и нашел выход, так как работающего решения так и не получил к сожалению.

KosBeg 20.07.2015 09:40

Цитата:

Сообщение от VINRARUS
Теперь с уверенностью можно сказать что KosBeg не ёж. :)

мне это считать комплиментом? :D
Цитата:

Сообщение от VINRARUS
Тем не менее он дал буквальный ответ на мой конкретный вопрос, а дальше я уже сам понял что оно малополезно.

хоть чем-то помог) если помог конечно =)

kostyanet 21.07.2015 08:24

Цитата:

Сообщение от VINRARUS
Последовательное выполнение кода.
Ну или возможность вынуть вес файла так же легко как и разрешение изображения (напрямую, а не прописанное в тегах разумеется).


Теперь когда поняли что сами виноваты, будете тупенького изображать? Типа а загрузите мне размер файла куда-нить там, хз, ну, ваще, как-то так. Не стоит, и так похоже.

Размеры файлов это не длина данных, а длину данных ресурса браузер получает в заголовках и может сохранить. Например аватара КозБега - 2,77 KB (2 841 bytes) - это я скопировал с View Image Info. Но это в ФФ, в Ишаке или Хроме такой фичи может не быть вообще и вряд ли можно надеятся добраться до нее из скрипта (или попробуйте).


Это все техника, а я хотел отметить отношение. Типа такого, что вам как той блондинке за рулем все должны и обязаны и свою руку и сердце вы отдадите тому кавалеру, кто сделает не так как надо, а как вы там вообразили себе надо сделать.

Сначала может показаться полезным заставлять кавалеров рылом землю рыть в поисках решения, но затем мы быстро увидим как они подгоняют обычное решение под необычное чтоб блондинке засадить или бюджетик в пару лярдов попилить.

Вот поэтому тупизна и волюнтаризм - вредны и расточительны.

ЗЫ Дело-то не в технике и размеров "файлов" - это все вам спецы сделают как два пальца. Дело в том насколько эти спецы имеют над вами власть, о которой вы вообще не догадываетесь веря что солнце всходит и заходит по вашему веленью.

kostyanet 21.07.2015 08:30

Цитата:

Сообщение от VINRARUS
В моем случае этого было бы достаточно так как картинка закэширована еще до вызова этой функции.

Ну вот, ему все заранее известно. Между тем сервер может отдавать каждый раз картинку не проверяя пришел ли там вопрос иф-модифайд-сайнс. Второе - браузер может не закешировать по разным причинам. Например в приватном окне сайт открыт, или еще как-то юзер догадался запретить кеш.

Это все мелочевка и баян. Но вот когда по сотне таких баянов каждый день от каждого из 100 миллионов граждан - то оно и складывается в гору мусора.

Короче, есть индустриальный подход и решения высокой степени абстракции и есть колхозный подход и костыльные решения сдесь и сейчас затереть нарыв и до прорыва. Само собой ламеры приносят сюда свои колхозы, а роль постояльцев форума, специалистов, переводить их слабый еще мозг на индустриальные рельсы. ПОтому что больше некому.

VINRARUS 21.07.2015 14:43

Цитата:

Сообщение от kostyanet
Теперь когда поняли что сами виноваты, будете тупенького изображать?

Кода оба собеседника єтим занимаются это уже не весело, правда ведь?
Цитата:

Сообщение от kostyanet
Это все техника, а я хотел отметить отношение. Типа такого, что вам как той блондинке за рулем все должны и обязаны и свою руку и сердце вы отдадите тому кавалеру, кто сделает не так как надо, а как вы там вообразили себе надо сделать.

В нормальных языках программирования это так и происходит.
Цитата:

Сообщение от kostyanet
веря что солнце всходит и заходит по вашему веленью.

Магические шторы в помощ.
Цитата:

Сообщение от kostyanet
Между тем сервер может отдавать каждый раз картинку не проверяя пришел ли там вопрос иф-модифайд-сайнс.

В моем коде зависит от браузера.
Цитата:

Сообщение от kostyanet
Короче, есть индустриальный подход и решения высокой степени абстракции и есть колхозный подход и костыльные решения сдесь и сейчас затереть нарыв и до прорыва. Само собой ламеры приносят сюда свои колхозы, а роль постояльцев форума, специалистов, переводить их слабый еще мозг на индустриальные рельсы. ПОтому что больше некому.

Дорогой индустриальный постоялец на рельсах :) , ты смог лишь указать на ошибки но не предоставил альтернатив.
Так почему же меня осуждаешь за то что я нашел выход без твоей помощи?
Ну или с твоей, если указание на ошибки считать помощью. :victory:
ПС: вот только мощностью мозга не меряйся, все равно она ограничена.

kostyanet 22.07.2015 06:08

Не в вашем браузере дело, а в тех примерах которыми будет заполнена база данных форума и на которых будут учиться другие люди. Например если кто-то пишет ковычки, то любой имеет право сказать у вас ширинка расстегнута, то есть написать кавычки, чтобы ошибка НЕ распространялась.

Рабочий код я предоставил, возможно его надо протестить еще в реальных условиях, но суть там вся правильная. Ваши белые и пушистые хотелки должны быть втоптаны в грязь бытия по той же причине - чтобы ошибка НЕ распространялась.

Клиент-серверные технологии всегда были и будут асинхронными и ничего тут не поделаешь. В теории, конечно, вы можете засосать себе в локаль весь интернет и начинать уже программировать как на нормальном десктопе. Так понятно?

kostyanet 22.07.2015 06:16

Кстати, кто помнит какую команду надо включить в цикл вывода на бейсике, чтоб вывод происходил по мере, а не когда все уже выведется?

Я к тому что на десктопе в принципе все то же самое, с той лишь разницей что время ожидания небольшое. Однако я лично до сих пор не пойму почему в ФШ нельзя открыть файл перетаскиванием в то время, как активен диалог open file.

Потому что да - на десктопе такие вот парадигмы угребищные царят еще со времен МС-Доса. Куда вас и надо послать с веба.

VINRARUS 22.07.2015 10:43

Цитата:

Сообщение от kostyanet
Не в вашем браузере дело, а в тех примерах которыми будет заполнена база данных форума и на которых будут учиться другие люди.

Я просто у себя вижу что ФФ использует закэшированное изображение для извлечения веса картинки, а упоротый ИЕ заново грузит картинку для этого дела.
Проверено после отключения сервера - ФФ работает, а в ИЕ нет.
И да, если бы в ИЕ на 2 секунды стопорилось все была бы лишняя причина перейти на нормальный браузер. :write:
Цитата:

Сообщение от kostyanet
Рабочий код я предоставил, возможно его надо протестить еще в реальных условиях, но суть там вся правильная.

Он работает льшь частично, даже после исправлений с req.
Цитата:

Сообщение от kostyanet
Ваши белые и пушистые хотелки должны быть втоптаны в грязь бытия по той же причине - чтобы ошибка НЕ распространялась.

Что бы они не вылезли вновь нужно указать почему они были втоптаны, банальным "потому что весь последующий код должен происходить внутри функции" например.
Цитата:

Сообщение от kostyanet
Потому что да - на десктопе такие вот парадигмы угребищные царят еще со времен МС-Доса. Куда вас и надо послать с веба.

Бери круче, я програмирую на shell, да еще и в многопотоке изредка. :D

devote 22.07.2015 11:16

Цитата:

Сообщение от VINRARUS
Примите мои соболезнования.

соболезнования в чем?

Цитата:

Сообщение от VINRARUS
В нормальных языках программирования это так и происходит.

В чем ненормальность проявляется в JS?

Цитата:

Сообщение от VINRARUS
я програмирую на shell, да еще и в многопотоке изредка.

если говорите о многопоточности, тогда чем вам не угодил JS?

kostyanet 22.07.2015 12:26

Цитата:

Сообщение от VINRARUS
я програмирую на shell

Батники пишет. Многопоточные, ога. :)

kostyanet 22.07.2015 12:31

Цитата:

Сообщение от VINRARUS
Я просто у себя вижу что ФФ использует закэшированное изображение для извлечения веса картинки, а упоротый ИЕ заново грузит картинку для этого дела.

При чем тут вообще этот кеш-хренеж? Это частный случай что фотка загружена была в прошлом, и частный не в том что вы эту часть определили, а в том что в этой части - в том браузере - так будет работать, а в другом не будет, в а хроме вообще внатуре будет. Кстати, не проверяли?

Короче говоря вы оказались крайне недовольны уровнем абстрактного мышления себя как программиста. Элементарный колбек не захотели освоить, типа, потому что в "нормальных" языках такой байды нету. Квантор.

kostyanet 22.07.2015 12:34

Цитата:

Сообщение от VINRARUS
Он работает льшь частично, даже после исправлений с req.

Ну моя косяк что вписал this вместо хардкода. Думал что легко же будет поменять на что там должно быть. Вам оказалось - не легко.

Почему пиксельный размер оно не берет - я понятия не имею что вы там наворотили. Вызов на пиксельный размер - последний в туннеле. ЕГо не взять просто нельзя. Иначе ничего вообще не будет работать.

kostyanet 22.07.2015 12:42

Бл, пришлось лезть в его помойку...

Цитата:

Сообщение от VINRARUS
Он работает льшь частично, даже после исправлений с req.


ну Блинки Ббилл зафигом в onload фотки-то this поменял на этот сраный req???

Ну конечно не будет работать, блинки билл, иди пиши свой шелл...


Часовой пояс GMT +3, время: 17:24.