Забыли пароль?
Запросите новый здесь.

Автор темы: Zaxap
ID темы: 2189
Информация:
Тема содержит 28 сообщения, была просмотрена 29375 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » Javascript, ajax, jquery
 Распечатать тему
аналог foreach в js или вопрос по $.each jquery
Zaxap
Делаю так:
Загрузить источник  GeSHi: Javascript
  1. //...
  2. if(typeof item.attachments !== "undefined"){
  3. $.each(item.attachments, function(index, attachments){
  4. if(typeof attachments.photo !=="undefined"){
  5. photo = attachments.photo;
  6. if(photo.width<=75){
  7. full_photo=photo.photo_75;
  8. }else if(photo.width<=130){
  9. full_photo=photo.photo_130;
  10. }else if(photo.width<=604){
  11. full_photo=photo.photo_604;
  12. }else if(photo.width<=807){
  13. full_photo=photo.photo_807;
  14. }else if(photo.width<=1280){
  15. full_photo=photo.photo_1280;
  16. }else if(photo.width<=2560){
  17. full_photo=photo.photo_2560;
  18. }
  19. small_photo = photo.photo_75;
  20. image = "<a href=\""+full_photo+"\"><img src=\""+small_photo+"\" alt=\"\"></a>";
  21. }else{image="";}
  22. });
  23. }
  24. $("#section").append(image);
  25. //...
Добавлено за 0.007 секунд, используя GeSHi 1.0.8.10

Хотелось бы сказать: "все хорошо", но вот "хорошо" как раз не получается.

Изображения выводятся только одиночно, да и то в самом конце подгрузки...
Думал, что это все из-за неправильно заданного цикла с $.each(), но в середине также присутствуют записи с одним изображением, которое появляться никак не хочет (хотя сам цикл, кажется, тоже немного не такой, поэтому картинки выводятся одиночно)...
В середине же их нет: почему-то срабатывает else и image становится пустым...


В чем может быть ошибка?
Зло не дремлет, а я добрый...
 
Pisatel
Мб размер поставить в кавычки? <= "1280" И вот еще что. Наверное, <= так нельзя, так как условие будет срабатывать ВО ВСЕХ случаях. Лучше проверять просто =.
 
Web
Zaxap
Pisatel, нет, как раз "меньше либо равно".
Если размер картинки меньше или равен 75, то срабатывает условие, если не срабатывает, то ищем картинку побольше...
Таким вот нехитрым образом я вытаскиваю самую большую существующую картинку.
Если бы условие срабатывало во всех случаях... но почти во всех срабатывает else (т.е. image="";). Если бы оно не срабатывало нигде, то было бы намного проще, ведь функция тогда бы просто не работала... но нет, оно где-то почему-то работает...

Но даже без этих условий (раз 5 проверял) просветление на функцию не находит, чудеса не творятся...
Значит все дело в each.
Изменил(а) Zaxap, 19.05.2014 15:34
Зло не дремлет, а я добрый...
 
Pisatel
Меньше или равно (<=)
Возвращает true, если левый операнд меньше правого или равен ему.

То есть, 5<=50 true, 10<=50 true, 25<=50 true... Надеюсь, ход мыслей понятен. У тебя все условия срабатывают и получается каша.
 
Web
Zaxap
Pisatel, срабатывает else, при котором image равняется 0. Это же условие работает, как часы (там, где не срабатывает else). Проблема же в foreach, в том, что else срабатывает почти везде по непонятной причине.

У меня нет 5<=75, у меня есть 75<=75, 502<=604 (но это больше 130, поэтому условие никак не срабатывает), 2100<=2560... и прочее...
А каша - это у П.Дурова в API каша... по-дурацки все выводится, как не крути...

---

давайте... сравним php и js-jq функции, что ли... делал все по аналогии...

Сначала php, за ним js...


То, в чем функции расходятся (относительно), я пометил таким вот комментарием для наглядности: /*!*/...
Зло не дремлет, а я добрый...
 
Pisatel
Я не знаю, верна ли твоя функция, я лишь пытаюсь указать примерно на это
Загрузить источник  GeSHi: Javascript
  1. // допустим, photo.width = 75
  2. if(photo.width<=75){ //true
  3. full_photo=photo.photo_75;
  4. }else if(photo.width<=130){ // true
  5. full_photo=photo.photo_130;
  6. }else if(photo.width<=604){ //true
  7. full_photo=photo.photo_604;
  8. }else if(photo.width<=807){ // true
  9. full_photo=photo.photo_807;
  10. }else if(photo.width<=1280){ // true
  11. full_photo=photo.photo_1280;
  12. }else if(photo.width<=2560){ // true
  13. full_photo=photo.photo_2560;
  14. }
  15. // ну и чему теперь равно full_photo ?
Добавлено за 0.003 секунд, используя GeSHi 1.0.8.10
 
Web
Zaxap
Pisatel, заметьте, 10<=75 срабатывает => else - уже нет.
Если бы все условия шли в обратном порядке - да.

У меня вопрос по форычу ($.each()), не по моему условию. Все-таки тут проблема с тем, что срабатывает
$.each((){if(){image="true";}else{image="";});.
Изменил(а) Zaxap, 19.05.2014 13:48
Зло не дремлет, а я добрый...
 
Pisatel
Все равно позволю себе настоять, что правильным выражение будет такое
Загрузить источник  GeSHi: Javascript
  1.  
  2. if(photo.width<=75){
  3. full_photo=photo.photo_75;
  4. }else if(photo.width > 75 && photo.width<=130){
  5. full_photo=photo.photo_130;
  6. }else if(photo.width > 130 && photo.width<=604){
  7. full_photo=photo.photo_604;
  8. }else if(photo.width > 604 && photo.width<=807){
  9. full_photo=photo.photo_807;
  10. }else if(photo.width > 807 && photo.width<=1280){
  11. full_photo=photo.photo_1280;
  12. }else if(photo.width > 1280 && photo.width<=2560){
  13. full_photo=photo.photo_2560;
  14. }
Добавлено за 0.003 секунд, используя GeSHi 1.0.8.10
 
Web
Rush
а разве вк апи возвращает ширину изображений? я помню только photo_75, photo_130 и т.д.
вардамп хде?
 
Web
Zaxap
Rush... Вопрос по $.each((){}) или еще чему-то, но не по "есть ли width в photo", ибо проблема не в этом...
Почему-то практически везде срабатывает else и image становится равно ничему (image="";).
П.С. Пишу это почти в каждом посте... как будто никто не читает первый пост, либо читает через строчки...
Мне лучше знать, не вы ведь по сей день паритесь над vk api... тут ошибка с $.each условием в JavaScriipt-JQuery, а не с моей отсебятиной :(

P.S. Вот:
Загрузить источник  GeSHi: PHP
  1. object(stdClass)#39 (2) { ["type"]=> string(5) "photo" ["photo"]=> object(stdClass)#40 (15) { ["id"]=> int(323805036) ["album_id"]=> int(-7) ["owner_id"]=> int(-56078485) ["user_id"]=> int(100) ["photo_75"]=> string(53) "http://cs320824.vk.me/v320824107/8fec/HiCOaTwZPPs.jpg" ["photo_130"]=> string(53) "http://cs320824.vk.me/v320824107/8fed/oAd1OkQIRbw.jpg" ["photo_604"]=> string(53) "http://cs320824.vk.me/v320824107/8fee/D2JpkZZxc1Q.jpg" ["photo_807"]=> string(53) "http://cs320824.vk.me/v320824107/8fef/zkxblBfVo78.jpg" ["photo_1280"]=> string(53) "http://cs320824.vk.me/v320824107/8ff0/w4RMeX4SCks.jpg" ["photo_2560"]=> string(53) "http://cs320824.vk.me/v320824107/8ff1/ObNSdQiCJNM.jpg" ["width"]=> int(1348) ["height"]=> int(661) ["text"]=> string(0) "" ["date"]=> int(1391671505) ["access_key"]=> string(18) "1ffe996c6f37b50a3d" } } object(stdClass)#41 (2) { ["type"]=> string(5) "photo" ["photo"]=> object(stdClass)#42 (15) { ["id"]=> int(323805038) ["album_id"]=> int(-7) ["owner_id"]=> int(-56078485) ["user_id"]=> int(100) ["photo_75"]=> string(53) "http://cs320824.vk.me/v320824107/8fe2/ZP00qa4CXyE.jpg" ["photo_130"]=> string(53) "http://cs320824.vk.me/v320824107/8fe3/Z5MBoAVg1xw.jpg" ["photo_604"]=> string(53) "http://cs320824.vk.me/v320824107/8fe4/UAPL7_2XJNo.jpg" ["photo_807"]=> string(53) "http://cs320824.vk.me/v320824107/8fe5/k_vIa-oEShs.jpg" ["photo_1280"]=> string(53) "http://cs320824.vk.me/v320824107/8fe6/KgzjFS_CwVI.jpg" ["photo_2560"]=> string(53) "http://cs320824.vk.me/v320824107/8fe7/3Qxrd8YJoD0.jpg" ["width"]=> int(1349) ["height"]=> int(661) ["text"]=> string(0) "" ["date"]=> int(1391671505) ["access_key"]=> string(18) "7257464a8d2edb7758" } } object(stdClass)#43 (2) { ["type"]=> string(5) "photo" ["photo"]=> object(stdClass)#44 (15) { ["id"]=> int(323805037) ["album_id"]=> int(-7) ["owner_id"]=> int(-56078485) ["user_id"]=> int(100) ["photo_75"]=> string(53) "http://cs320824.vk.me/v320824107/8fce/c6_bRpmKARA.jpg" ["photo_130"]=> string(53) "http://cs320824.vk.me/v320824107/8fcf/beU-dgcZtaY.jpg" ["photo_604"]=> string(53) "http://cs320824.vk.me/v320824107/8fd0/XtoGv8n-Brg.jpg" ["photo_807"]=> string(53) "http://cs320824.vk.me/v320824107/8fd1/zf1r7bbV_yQ.jpg" ["photo_1280"]=> string(53) "http://cs320824.vk.me/v320824107/8fd2/wsUEUd_2bM8.jpg" ["photo_2560"]=> string(53) "http://cs320824.vk.me/v320824107/8fd3/eSitZ5U1iXs.jpg" ["width"]=> int(1348) ["height"]=> int(661) ["text"]=> string(0) "" ["date"]=> int(1391671505) ["access_key"]=> string(18) "1f28f22de306b4f2bd" } } object(stdClass)#45 (2) { ["type"]=> string(5) "photo" ["photo"]=> object(stdClass)#46 (15) { ["id"]=> int(323805039) ["album_id"]=> int(-7) ["owner_id"]=> int(-56078485) ["user_id"]=> int(100) ["photo_75"]=> string(53) "http://cs320824.vk.me/v320824107/8fd8/ge2RbDc1Wos.jpg" ["photo_130"]=> string(53) "http://cs320824.vk.me/v320824107/8fd9/wQy2ZOz75zo.jpg" ["photo_604"]=> string(53) "http://cs320824.vk.me/v320824107/8fda/aTJJAvhLRyk.jpg" ["photo_807"]=> string(53) "http://cs320824.vk.me/v320824107/8fdb/_vEhY_x9SQQ.jpg" ["photo_1280"]=> string(53) "http://cs320824.vk.me/v320824107/8fdc/xexqX3LeZXk.jpg" ["photo_2560"]=> string(53) "http://cs320824.vk.me/v320824107/8fdd/fB3u47VImUU.jpg" ["width"]=> int(1351) ["height"]=> int(661) ["text"]=> string(0) "" ["date"]=> int(1391671505) ["access_key"]=> string(18) "31f00ddc209ecb088e" } } object(stdClass)#47 (2) { ["type"]=> string(5) "photo" ["photo"]=> object(stdClass)#48 (15) { ["id"]=> int(323805040) ["album_id"]=> int(-7) ["owner_id"]=> int(-56078485) ["user_id"]=> int(100) ["photo_75"]=> string(53) "http://cs320824.vk.me/v320824107/8fc4/NPxb1wjwSw4.jpg" ["photo_130"]=> string(53) "http://cs320824.vk.me/v320824107/8fc5/vvt1EjrXQsU.jpg" ["photo_604"]=> string(53) "http://cs320824.vk.me/v320824107/8fc6/CSYZWaZoiu0.jpg" ["photo_807"]=> string(53) "http://cs320824.vk.me/v320824107/8fc7/AJrKRQVPX0I.jpg" ["photo_1280"]=> string(53) "http://cs320824.vk.me/v320824107/8fc8/xQpDK6a4Mgc.jpg" ["photo_2560"]=> string(53) "http://cs320824.vk.me/v320824107/8fc9/HpaWEhy1ILE.jpg" ["width"]=> int(1348) ["height"]=> int(661) ["text"]=> string(0) "" ["date"]=> int(1391671505) ["access_key"]=> string(18) "101367655123cfe2c1" } }
Добавлено за 0.031 секунд, используя GeSHi 1.0.8.10

Изменил(а) Zaxap, 19.05.2014 15:42
Зло не дремлет, а я добрый...
 
Rush
так как у тя может if сработать, если photo.width === undefined?
 
Web
Zaxap
Rush, не знаю, как еще объяснить, что условие с full_photo тут совершенно не причем, даже если оно неверно...
(Через строчки читаете, ей-богу!)


Загрузить источник  GeSHi: Javascript
  1. if(typeof item.attachments !== "undefined"){
  2. $.each(item.attachments, function(index, attachments){
  3. if(typeof attachments.photo !=="undefined"){
  4. photo = attachments.photo;
  5. small_photo = photo.photo_75;
  6. image = "<img src=\""+small_photo+"\" alt=\"\">";
  7. }else{
  8. image="";
  9. }
  10. });
  11. }
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10

Скажу так: тоже самое, что и с full_photo - ничего существенно не изменилось (кроме кликабельности)...
Изображения отображаются только в конце, в середине их нет. Не только те записи, где картинок несколько, но и те, где картинка одна...
(надеюсь, стало понятнее)

---

Путем проб и ошибок я еще раз доказал: почему-то срабатывает else даже там, где картинки есть...
Загрузить источник  GeSHi: Javascript
  1. //if(typeof item.attachments !== "undefined"){
  2. $.each(item.attachments, function(index, attachments){
  3. if(typeof attachments.photo !=="undefined"){
  4. image="<img src=\"http://rusfusion.ru/images/avatars/avatar_saber_100x100.png\">";
  5. }else{
  6. image="1234567890"; //Вот оно!
  7. }
  8. });
  9. //}
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10

Изменил(а) Zaxap, 20.05.2014 04:57
Зло не дремлет, а я добрый...
 
Rush
undefined не надо в кавычки брать
 
Web
Zaxap
Rush, погуглил немного насчет этого: кавычки, как я понял, не нужны, если не используешь typeof, с typeof без них не работает...
Сделал так:
if(attachments.photo !== undefined){}
Ничего не изменилось...
---
Сменил условие на
if('photo' in attachments){}
...и снова ничего не изменилось...
---
Следовательно, что мне уже давно стало ясно, о чем я уже 2 раза (а то и 4) пишу:
Что-то не так с foreach'ем.
Загрузить источник  GeSHi: Javascript
  1. $.each(item.attachments, function(index, attachments){ //Вот с этим вот что-то не так...
  2. image="<img src=\"attachments.photo.photo_75\">";
  3. }else{
  4. image="";
  5. }
  6. $("#section").append(image); //...возможно, потому что здесь image не в $.each((){});
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10

Изменил(а) Zaxap, 20.05.2014 09:33
Зло не дремлет, а я добрый...
 
Rush
Скачать исходники  Код

$.each(item.attachments, function(index, attachments){
    console.log(attachments);
    console.log(typeof attachments);
});




вывод
 
Web
Zaxap
При таком раскладе везде "undefined undefined"...

Загрузить источник  GeSHi: Javascript
  1. if(typeof item.attachments !== "undefined"){
  2. $.each(item.attachments, function(index, attachments){
  3. hello = console.log(attachments);
  4. hello2 = console.log(typeof attachments);
  5. });
  6. }
  7. $("#section").append(hello+" "+hello2);
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10


---

Скачать исходники  Код
100 200 (x26)
undefined undefined
undefined undefined
100 200 (x11)
undefined undefined
undefined undefined



Вот так вот выглядит результат при

Загрузить источник  GeSHi: Javascript
  1. if(typeof item.attachments !== "undefined"){
  2. $.each(item.attachments, function(index, attachments){
  3. if(typeof attachments.photo !== "undefined"){
  4. hello = console.log(attachments.photo.photo_75);
  5. hello2 = console.log(typeof attachments.photo.photo_75);
  6. }else{hello="100";hello2="200";}
  7. });
  8. }
  9. $("#section").append(hello+" "+hello2);
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10


Причем на скрине firebug'а отчетливо видны те самые "невидимые картинки" (если быть точнее, ссылки на них), которые не выводятся в середине...
Zaxap присоединено следующее:файл:
Вы не можете видеть вложения в этой теме.

Изменил(а) Zaxap, 20.05.2014 10:27
Зло не дремлет, а я добрый...
 
Rush
console.log что выводит?
 
Web
Zaxap
Смотря какой вариант. Все написал же...

При таком раскладе везде "undefined undefined"...
......

Скачать исходники  Код
100 200 (x26)
undefined undefined
undefined undefined
100 200 (x11)
undefined undefined
undefined undefined



Вот так вот выглядит результат при
......

Зло не дремлет, а я добрый...
 
Razor
Потому что ты append делаешь ЗА циклом, вот он и возвращает undefined.. Попробуй внутри.
 
Zaxap
Razor, в этой теме обсуждалось ваше "попробуй внутри" :)

Zaxap написал:

Загрузить источник  GeSHi: Javascript
  1.  
  2. $("#section").append(
  3. "<article><span class=\"date\">"+item.date+"</span>"+
  4. "<span class=\"text\">"+item.text+"</span>"+
  5. if(typeof item.attachments !== "undefined"){
  6. //...
  7. }
  8. "</article>"
  9. );
  10.  
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10

Кидает ошибку синтаксиса на if(typeof item.attachments !== "undefined"){, но вот что тут не так? Перепроверял раз 20...

Pisatel написал:

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

Загрузить источник  GeSHi: Javascript
  1.  
  2. if(typeof(item.attachments !== "undefined")){
  3. var myattach = "здесь то, что нужно"
  4. } else {
  5. var myattach = "";
  6. }
  7. $("#section").append(
  8. "<article><span class=\"date\">"+item.date+"</span>"+
  9. "<span class=\"text\">"+item.text+"</span>"+myattach+"</article>"
  10. );
  11.  
Добавлено за 0.003 секунд, используя GeSHi 1.0.8.10



Если знаете как, то скажите, пожалуйста...
Изменил(а) Zaxap, 20.05.2014 10:59
Зло не дремлет, а я добрый...
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум: