Скрипт отображения веса картинки, помогите подправить
<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 части кода? |
Толи они в 2 потока как то обрабатываются...
|
1) поделить на 1024
2) засунуть первую часть кода на место alert() второй части кода |
kostyanet,
1) спасибо 2) в первом alert ломаются дополнительно и переменные ширины и высоты, во втором толку нуль Напоминаю что нужны все 3 рабочие переменные zheight, zwidth, zsize после этого кода. |
За вас что ли засунуть? Ну, попробую:
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); }); |
Цитата:
поэотму если картинка на домене отличному от текущего - ничего не будет) а переменные "zheight" и "zwidth" берутся не з ответа аякса, поэтому доступны |
За
img_data.b = this не уверен, но верю что жикверя не должна требовать хардкода для обращения к собственному объекту внутри собственной же функции. Например в колбеке объекта XMLHttpRequest - this - он сам. |
Цитата:
|
так работает - но только в пределах домена,
с домена "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>БР |
Цитата:
http://192.168.16.2 Но и там и там код работает в равных условиях. Цитата:
Цитата:
|
твою....
<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" |
Цитата:
Исправил, еще раз посмотри, проблема та же. |
Цитата:
|
Цитата:
|
Цитата:
|
Как я и предупреждал надо читать документацию на гэ-квери, ибо
TypeError: this.getResponseHeader is not a function и еще там синтаксическая ошибка - ищите (может быть и моя, а искать - вам) SyntaxError: missing ) after argument list - 41:80 |
сделайте как было
var req=$.ajax({... и внутри вместо this - req. и та самая функция |
Сделал. Проверяю на телефонном сервере...
|
Понятно, в суксесь линк будет jqXHR, то есть вместо this - jqXHR
Полностью вот так Type: Function( Anything data, String textStatus, jqXHR jqXHR ) |
Очень круто... :-E
На телефонном сервере jquery-1.10.1, а согласно єтой статье "jQuery XMLHttpRequest (jqXHR) появился в библиотеке jQuery в версии 1.5". Короче продолжу пытки немного позже. Вот еще есть вариант без куджери вроде. А с куджери от сюда взял. |
ну так работает же...
Вложений: 1
ну так работает же...
только что тестил на локалке два файла которые первые попали под руку положил в архив, все работает... я надеюсь размеры картинки сами прикрутите? |
Цитата:
|
Не так оно работает как нужно.
Цитата:
Вот только я сразу указал что переменная с весом файла НЕ работает вне функции. Мне ведь не сообщение с размером файла нужно, а передача этого размера в переменной дальше по коду весом 48 кб. Вот ты опять привел пример который вне функции get_filesize ничего делать не может. Я просто думал решение этой задачи простое, а оно вон как запутано. :-? Цитата:
|
Цитата:
выше уже были примеры |
Асинхрон - это зло. :-/
Вот решил задачу таким топорным способом, зато надежно: 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: Примите мои соболезнования. :) |
Кино называется "Тупой и еще тупее".
Цитата:
Ничего так и не поняли. Ваша задача на любом языке была бы описана точно так же. В противном случае - мертвый зависон на все время пока не придет ответ от сервера, а если не придет вообще - то снять задачу можно будет только выпиливанием треда браузера из списка задач в операционке. Вы так хотели что ли? Потому что у вас там 2 запроса на загрузку ресурса с сервера. Это не то же самое что var a=1; Это то же самое что пойти в магазин, взять товар, постоять в очереди в кассу и вернуться. Ну расскажите на каком правильном языке эту задачу можно решить как там - логически понятно? ЗЫ Дело тут не в жабе, а в вебе. |
При чем тут window? Я применил ради прикола - ежу же понятно нет никакого смысла писать что-то в виндоу после того, как придет ответ сервера. Ну если вы напишите таймер, который через 1 сек будет тыкаться в эту переменную в виндоу и когда там чего-то появится - ура - побежит что-то делать полезное, тогда только. Но так никто не делает.
Я хочу лишь определить для тех кто еще будет читать эту тему и подумает "да как все запущено", что проблема тут не в жабе, а в авторе темы которому лень поскрипеть мозгами. |
Цитата:
Цитата:
Ну или возможность вынуть вес файла так же легко как и разрешение изображения (напрямую, а не прописанное в тегах разумеется). Цитата:
Тем не менее он дал буквальный ответ на мой конкретный вопрос, а дальше я уже сам понял что оно малополезно. Цитата:
Цитата:
Я ведь поскрепел и нашел выход, так как работающего решения так и не получил к сожалению. |
Цитата:
Цитата:
|
Цитата:
Теперь когда поняли что сами виноваты, будете тупенького изображать? Типа а загрузите мне размер файла куда-нить там, хз, ну, ваще, как-то так. Не стоит, и так похоже. Размеры файлов это не длина данных, а длину данных ресурса браузер получает в заголовках и может сохранить. Например аватара КозБега - 2,77 KB (2 841 bytes) - это я скопировал с View Image Info. Но это в ФФ, в Ишаке или Хроме такой фичи может не быть вообще и вряд ли можно надеятся добраться до нее из скрипта (или попробуйте). Это все техника, а я хотел отметить отношение. Типа такого, что вам как той блондинке за рулем все должны и обязаны и свою руку и сердце вы отдадите тому кавалеру, кто сделает не так как надо, а как вы там вообразили себе надо сделать. Сначала может показаться полезным заставлять кавалеров рылом землю рыть в поисках решения, но затем мы быстро увидим как они подгоняют обычное решение под необычное чтоб блондинке засадить или бюджетик в пару лярдов попилить. Вот поэтому тупизна и волюнтаризм - вредны и расточительны. ЗЫ Дело-то не в технике и размеров "файлов" - это все вам спецы сделают как два пальца. Дело в том насколько эти спецы имеют над вами власть, о которой вы вообще не догадываетесь веря что солнце всходит и заходит по вашему веленью. |
Цитата:
Это все мелочевка и баян. Но вот когда по сотне таких баянов каждый день от каждого из 100 миллионов граждан - то оно и складывается в гору мусора. Короче, есть индустриальный подход и решения высокой степени абстракции и есть колхозный подход и костыльные решения сдесь и сейчас затереть нарыв и до прорыва. Само собой ламеры приносят сюда свои колхозы, а роль постояльцев форума, специалистов, переводить их слабый еще мозг на индустриальные рельсы. ПОтому что больше некому. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Так почему же меня осуждаешь за то что я нашел выход без твоей помощи? Ну или с твоей, если указание на ошибки считать помощью. :victory: ПС: вот только мощностью мозга не меряйся, все равно она ограничена. ![]() |
Не в вашем браузере дело, а в тех примерах которыми будет заполнена база данных форума и на которых будут учиться другие люди. Например если кто-то пишет ковычки, то любой имеет право сказать у вас ширинка расстегнута, то есть написать кавычки, чтобы ошибка НЕ распространялась.
Рабочий код я предоставил, возможно его надо протестить еще в реальных условиях, но суть там вся правильная. Ваши белые и пушистые хотелки должны быть втоптаны в грязь бытия по той же причине - чтобы ошибка НЕ распространялась. Клиент-серверные технологии всегда были и будут асинхронными и ничего тут не поделаешь. В теории, конечно, вы можете засосать себе в локаль весь интернет и начинать уже программировать как на нормальном десктопе. Так понятно? |
Кстати, кто помнит какую команду надо включить в цикл вывода на бейсике, чтоб вывод происходил по мере, а не когда все уже выведется?
Я к тому что на десктопе в принципе все то же самое, с той лишь разницей что время ожидания небольшое. Однако я лично до сих пор не пойму почему в ФШ нельзя открыть файл перетаскиванием в то время, как активен диалог open file. Потому что да - на десктопе такие вот парадигмы угребищные царят еще со времен МС-Доса. Куда вас и надо послать с веба. |
Цитата:
Проверено после отключения сервера - ФФ работает, а в ИЕ нет. И да, если бы в ИЕ на 2 секунды стопорилось все была бы лишняя причина перейти на нормальный браузер. :write: Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Короче говоря вы оказались крайне недовольны уровнем абстрактного мышления себя как программиста. Элементарный колбек не захотели освоить, типа, потому что в "нормальных" языках такой байды нету. Квантор. |
Цитата:
Почему пиксельный размер оно не берет - я понятия не имею что вы там наворотили. Вызов на пиксельный размер - последний в туннеле. ЕГо не взять просто нельзя. Иначе ничего вообще не будет работать. |
Бл, пришлось лезть в его помойку...
Цитата:
ну Блинки Ббилл зафигом в onload фотки-то this поменял на этот сраный req??? Ну конечно не будет работать, блинки билл, иди пиши свой шелл... |
Часовой пояс GMT +3, время: 17:24. |