Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
фигня написана.

Трудно возразить.

Цитата:
более того, файлы же разные, наверно, для разных потоков.

Да, файлы разные, надо с xhr.open что-то делать.

Всего записей: 381 | Зарегистр. 19-04-2003 | Отправлено: 17:47 28-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Да, файлы разные, надо с xhr.open что-то делать.


Код:
<button type="button" class='lost-class' data-file='file1.txt'>Station1: <span></span></button>
<button type="button" class='lost-class' data-file='file2.txt'>Station2: <span></span></button>
 
<script>
const elements = document.querySelectorAll('.list-class');
let timer = null;
elements.forEach(elm => {
   elm.addEventListener("click", event => {
       if (timer)
          clearInterval(timer);
       timer = setInterval(() => {
           let xhr = new XMLHttpRequest();
           xhr.open("GET", "/meta/" + elm.getAttribute('data-file') + "?"  + new Date().getTime(), true);
           xhr.onreadystatechange = function() {
           if (xhr.readyState === 4 && xhr.status === 200) {
               console.log(xhr.responseText);
               elm.querySelector('span').innerHTML = this.responseText;
           }
           xhr.send();
       }, 5000);
   });
});
</script>

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 17:51 28-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В целом почти получилось что хотел. Перед xhr.send();  не хватает фигурной скобки. Можно убрать задержку при переключении кнопок, сейчас нажал другую кнопку, данные меняются через 5 сек. ?

Всего записей: 381 | Зарегистр. 19-04-2003 | Отправлено: 18:26 28-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Можно убрать задержку при переключении кнопок, сейчас нажал другую кнопку, данные меняются через 5 сек. ?

можно. но тогда функцию нужно описать отдельно.
 

Код:
<button type="button" class='lost-class' data-file='file1.txt'>Station1: <span></span></button>
<button type="button" class='lost-class' data-file='file2.txt'>Station2: <span></span></button>
 
<script>
const elements = document.querySelectorAll('.list-class');
let timer = null;
function AJAXrequest(elm) {
    let xhr = new XMLHttpRequest();
    xhr.open("GET", "/meta/" + elm.getAttribute('data-file') + "?"  + new Date().getTime(), true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            console.log(xhr.responseText);
            elm.querySelector('span').innerHTML = this.responseText;
        }
    }
    xhr.send();
}
 
elements.forEach(elm => {
   elm.addEventListener("click", event => {
       if (timer)
          clearInterval(timer);
       timer = setInterval(() => {
          AJAXrequest(elm);
       }, 5000);
       AJAXrequest(elm);
   });
});
</script>

 
или

Код:
<button type="button" class='lost-class' data-file='file1.txt'>Station1: <span></span></button>
<button type="button" class='lost-class' data-file='file2.txt'>Station2: <span></span></button>
 
<script>
const elements = document.querySelectorAll('.list-class');
let timer = null;
function AJAXrequest(elm) {
    let xhr = new XMLHttpRequest();
    xhr.open("GET", "/meta/" + elm.getAttribute('data-file') + "?"  + new Date().getTime(), true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            console.log(xhr.responseText);
            elm.querySelector('span').innerHTML = this.responseText;
        }
    }
    xhr.send();
    timer = setTimeout(() => { AJAXrequest(elm); }, 5000);
}
 
elements.forEach(elm => {
   elm.addEventListener("click", event => {
       if (timer)
          clearTimeout(timer);
       AJAXrequest(elm);
   });
});
</script>

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 18:33 28-07-2025 | Исправлено: Mavrikii, 18:46 28-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю, работает!
Есть железка, она не формирует GET запросы, но данные в ней меняются (состояние кнопок). В отладчике есть файл jquery.websocket.js, получается обмен данными идет через websocket а не через GET запросы?

Всего записей: 381 | Зарегистр. 19-04-2003 | Отправлено: 18:52 28-07-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
получается обмен данными идет через websocket а не через GET запросы

может, а может и нет. не могу сказать не видя.

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 19:00 28-07-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему не работает audioPlayer.stop(); ? Uncaught TypeError: audioPlayer.stop is not a function.
 

Код:
 
<button type="button" class='link-stop'>Stop</button>
 
   const elements = document.querySelectorAll('.link-stop');
    elements.forEach(elm => {
        elm.addEventListener("click", (event) => {
            const audioPlayer = document.getElementById('audioPlayer');
            audioPlayer.stop();
            return false;
            });
    });
 

Всего записей: 381 | Зарегистр. 19-04-2003 | Отправлено: 21:11 01-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
Почему не работает audioPlayer.stop(); ? Uncaught TypeError: audioPlayer.stop is not a function.

потому что нет метода .stop() у того элемента, что получили по ID
 
https://proweb63.ru/help/js/html5-audio-js

Цитата:
Как остановить воспроизведение audio
Команды stop нет, и чтобы остановить воспроизведение звукового файла, нужно два действия - пауза и задание нулевого значения для свойства currentTime- текущее время:
// Функция stop для Audio:
HTMLAudioElement.prototype.stop = function() {
  this.pause();
 this.currentTime = 0.0;
}
...
// использование
myAudio.stop();

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 21:16 01-08-2025 | Исправлено: Mavrikii, 21:20 01-08-2025
digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pause+currentTime = 0, наверно логика в этом есть )
 
Как передать переменную this.currentTime в обычный текст (команда с ошибкой) и сократить кол-во цифр после запятой (округлить) :
document.getElementById("out").innerText = "Проиграно: this.currentTime";
 
P.S. "Проиграно :" +  this.currentTime, это сделал, остался вопрос с округлением.

Всего записей: 381 | Зарегистр. 19-04-2003 | Отправлено: 21:34 01-08-2025 | Исправлено: digital422, 21:45 01-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
digital422

Цитата:
остался вопрос с округлением.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 21:52 01-08-2025
zzz528

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В чём смысл?

Цитата:
 function resizeWindow() {
   window.requestAnimationFrame(() => {

-    if (window.gResizePopup) {
-      window.gResizePopup(document.body.clientHeight);


+    const { gResizePopup } = /** @type {any} */ (window);
+    if (gResizePopup) {
+      gResizePopup(document.body.clientHeight);

     }
   });
 }
 

Всего записей: 2212 | Зарегистр. 20-06-2005 | Отправлено: 15:21 05-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zzz528

Цитата:
В чём смысл?

получение в виде константы только одной переменной/метода.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Destructuring

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 19:34 05-08-2025
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Давно не делал ниче на jquery, а тут приспичило. Вроде сделал, но через костыли. Как тут улучшить.
Есть множество структура типа  

Код:
 
<div class="MMM MMM-abracadabra"  
     <div class="MMM2 MMM2-abracadabra">
        <img fixtag = "needfrom">
     </div>
     <div class="MMM MMM-abracadabra">
        <div class="MMM MMM2-fix" need_this></div>
    </div>
</div>
 

Нам нужно к указанного Диву need_this прикрепить CSS(определенный цвет), аориентируясь по значению fixtag в картинке - need_from.
Сделал как то так .....

Код:
 
  $("[fixtag=needfrom]").closest('.MMM').children(".MMM").children().css('color', mycolor);
 

Так то сработало, но можно как уменьшить? А то таких штукенций 20+ на странице в массиве крутятся. Лишние children() - а как без него я не знаю. Нужный нам класс MMM2-fix фиксирвоанный, как то на него надо сразу попасть исходя из значения needfrom.
Пробовал  

Код:
 $("[fixtag=needfrom]").closest('.MMM').children(".MMM2-fix").css('color', mycolor);  
- не сработало

Всего записей: 738 | Зарегистр. 08-11-2004 | Отправлено: 21:47 06-08-2025 | Исправлено: jason32, 22:15 06-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jason32
$("[fixtag=needfrom]").closest('.MMM').find('.MMM2-fix').css('color', mycolor)
или
$('.MMM2-fix', $("[fixtag=needfrom]").closest('.MMM')).css('color', mycolor)
 

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 22:51 06-08-2025 | Исправлено: Mavrikii, 22:52 06-08-2025
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо, все работает, про синтаксис как во втором варианте и не знал.  
Но пока писал, понял что нужно просто освежить все эти функции.
Нащел ещё такой вариант
Код:
$("[fixtag=needfrom]").parent().next().children().css('color', mycolor);  
оказывается тоже работает. Так то все, уже выглядит норм

Всего записей: 738 | Зарегистр. 08-11-2004 | Отправлено: 23:32 06-08-2025
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишем Post-запрос через jquery и пытаемся сразу получить что там вернули - через переменную mia. Через console.log(mya); видно, что данные получены, и там есть поля responseJSON в виде массива, responseText и readyState(равное 4)  

Код:
 
var mya = $.post("user.php",{client_id: myclientId}).done( function( data ) {
         
          console.log(data.access_token);  // здесь все показывает
          $(".xxx" ).html( data.access_token ); // и даже в страницу вставляет в нужный элемент
            return data;
        })
console.log(mya); // сложный объект с функциями, см скрин
console.log(mya.responseJSON); //undefined
console.log(mya.responseJSON.access_token ); //undefined
console.log(mya. responseText); //undefined
console.log(mya.readyState); // а тут сразу все работает, 4.  
 

Пытаемся получить responseJSON - никак, responseText - никак, все undefined. Однако в самом запросе вон консоль логи повыказывают верные значения.  
Но как их вытащить из массива mia или ещё как, я не понимаю. Как блин получить поле access_token - оно же вон везде маячит, а в переменную не засунуть.  
скрин

Всего записей: 738 | Зарегистр. 08-11-2004 | Отправлено: 11:01 07-08-2025 | Исправлено: jason32, 11:40 07-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jason32

Цитата:
Пытаемся получить responseJSON - никак, responseText - никак, все undefined.  

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

Код:
$.post("user.php",{client_id: myclientId}, function( data ) {
   console.log(data.access_token);  // здесь все показывает
   $(".xxx" ).html( data.access_token ); // и даже в страницу вставляет в нужный элемент
})

 

Цитата:
а в переменную не засунуть.  

засунуть.. в глобальную ли, можно в дата-атрибут тега, много как можно.
 

Код:
let token = null;
$.post("user.php",{client_id: myclientId}, function( data ) {
   console.log(data.access_token);  // здесь все показывает
   $(".xxx" ).html( data.access_token ); // и даже в страницу вставляет в нужный элемент
   token = data.access_token;
   // вызвать функции работающие с полученным token
})
if (token) {
  // нет гарантии, что на момент выполенения блока token будет уже получен и выставлен
}
 

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 12:34 07-08-2025 | Исправлено: Mavrikii, 12:37 07-08-2025
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
да потому что запрос идет асинхронно.
поэтому данных еще нет на момент обращения, они будут в функции .done, когда придет ответ.  

Да, я теперь понял, меня смутило, что "var mya = $.post" содерждал всю инфу , судя по console.log , но вытащить никак. С get кстати так же
В итоге да, все нужное вставил в done  и нет проблем

Всего записей: 738 | Зарегистр. 08-11-2004 | Отправлено: 03:13 08-08-2025 | Исправлено: jason32, 04:30 08-08-2025
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как отловить через tampermonkey динамически создаваемый через JS элемент по нажатию по кнопке страницы для его изменения посредством CSS ?
 
Есть страница с нужным меню UL li, я смотрю в браузере его через "инспектировать", там классы, все дела. Но при попытке применить к этому UL простые способы типа   $(".needclass").find( 'li' ).css( "color", "blue" ); ничего не происходит - как я понимаю на странице этого меню ещё нет.
Пробовал  через setTimeout(function(){ }  - не помогает. Пробовал через директивы тампермонки // @run-at document-end - тоже ноль реакции. Пробовал в теле ajax-запроса GET - не помогает
 
НО иногда почему то срабатывает, 1 раз срабатывает после какого нить изменения в коде и потом снова пропадает, непонятноооо.  
 
Как вылавливать такие элементы, может есть в jquery что-то или какие то иного типа запросы?

 
PS Внезапно увидел, что меню создается динамически при нажатии по кнопке, а не после загрузки. Тогда вопрос меняется. Как менять динамически созданный нажатием на кнопку элемент посредством  tampermonkey ?

Всего записей: 738 | Зарегистр. 08-11-2004 | Отправлено: 09:13 09-08-2025 | Исправлено: jason32, 09:32 09-08-2025
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jason32

Цитата:
Как вылавливать такие элементы, может есть в jquery что-то или какие то иного типа запросы?
 

https://developer.mozilla.org/ru/docs/Web/API/MutationObserver
https://learn.javascript.ru/mutation-observer

Всего записей: 16389 | Зарегистр. 20-09-2014 | Отправлено: 09:16 09-08-2025 | Исправлено: Mavrikii, 09:17 09-08-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru