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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Mavrikii

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

Цитата:
Любой код

PHP в данной ситуации может вернуть кусок html кода, который, если вставить его в страницу, обработанная браузером (не все).
 

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

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

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 13:13 25-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я нашел в сети техническое решение, которое делает нечто подобное тому, что мне нужно, и приспособил его для своей задачи.  Макет находится вот здесь: http://fh7929mi.bget.ru/test-22.html
 
Но обнаружились две проблемы.
 
Подкачиваемый файл notice-test.php имеет такой код:
Подробнее...
 
В начале файла РНР код, предназначенный для контроля передачи числа 277 (это для примера, в реале будет $user_id) из html файла в файл РНР
    $name = $_GET['name'];
    file_put_contents('1.txt', $name);
 
 Почему-то это не работает.
 
В конце строка закрытия окна
<a class="close_uv" title="Закрыть" href="#close"></a>
 
И это тоже не работает.  
Хотелось, чтобы окно закрывалось или по клику на крестик, или по клику на любое место вне всплывающего окна.
 
Как это сделать, какой код добавить?
 
 
 
 
 

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 18:33 25-03-2023 | Исправлено: Vladsvn, 21:09 25-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn
вы бы почитали, сначала, основы HTTP протокола. как ваш скрипт получит значение name? только если оно будет передано как аргумент GET запроса или в теле POST запроса.
notice-test.php?name=значение
тогда $_GET['name'] будет содержать это значение. и лучше бы использовать, все же, fetch, для современных браузеров.
 
https://htmlacademy.ru/blog/php/get-vs-post
https://guruweba.com/html/metody-get-i-post-ispolzovanie-i-otlichiya/
 

Цитата:
И это тоже не работает.  
Хотелось, чтобы окно закрывалось или по клику на крестик, или по клику на любое место вне всплывающего окна.

ну так нужно с помощью js скрипта оталавливать клик либо на крестик, либо куда угодно вне окна.
проще и быстрее сделать с помощью jQuery, к примеру. потому что упрощает многие стандартные вещи, но можно и на чистом js, конечно же.

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 23:51 25-03-2023 | Исправлено: Mavrikii, 23:54 25-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я пересмотрел множество сайтов по поводу fetch. В основном, они пишут одно и тоже, копируя друг друга. Готового решения, которое подошло бы для моей задачи, я не встретил.
 
Методика GET и POST мне известна, но за ссылки спасибо - не вредно еще раз освежить их в памяти. Я и сам понимал, что нужен полноценный адрес с GET параметром, но смутило, что у автора скрипта, якобы, работало без этого. Подумал, что, может быть, есть какая-то тонкость, и решил Вас спросить.
 
Вот так будет правильно?
xmlhttp.open("GET", "notice-test.php?name=<?php echo $user_id; ?>", true);  
 
Или так можно  (с кавычками тут все правильно?):
 
<script type="text/javascript">
var name = "<?php echo $user_id; ?>";
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  { // код для IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp = new XMLHttpRequest();
  }
xmlhttp.onreadystatechange = function()
  {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
  {
  document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  }
  }
xmlhttp.open("GET", "notice-test.php?name='name'", true);      
xmlhttp.send();
}
</script>    
 

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 08:49 26-03-2023
Mavrikii

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

Цитата:
Вот так будет правильно?

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

Цитата:
Или так можно  (с кавычками тут все правильно?):

нельзя.
xmlhttp.open("GET", "notice-test.php?name=" + encodeURIComponent(name), true);      

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 08:56 26-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
"или этот id один на всей странице, независимо от того, куда кликнули?"
 
Да, это id один на всей странице. Это id посетителя, который просматривает сделанные ему уведомления.
 
Ещё хотел спросить вот что.  
 
В файле notice-test.php, код которого приведен выше, и который подкачивается на страницу, фактически полный типовой HTML код страницы: тут и <!DOCTYPE html>, и <html>, и <head>, и <meta charset>, и <title>, и <body>.
 
Действительно ли все это нужно?
 
Не лучше ли вместо всего этого дать
 
header("Content-type: text/html; charset=utf-8");

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 09:35 26-03-2023 | Исправлено: Vladsvn, 09:37 26-03-2023
Mavrikii

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

Цитата:
Да, это id один на всей странице. Это id посетителя, который просматривает сделанные ему уведомления.

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

Цитата:
Действительно все это нужно?

если вставляете в страницу с помощью javascript - нет.
 

Цитата:
Не лучше ли вместо всего этого дать

это не одно и то же.

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 09:37 26-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как тогда?
 
Если <!DOCTYPE html>, и <html>, и <head>, и <meta charset>, и <title>, и <body> не нужны, то что вместо них?

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 09:38 26-03-2023
Mavrikii

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

Цитата:
не нужны, то что вместо них?

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

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 09:39 26-03-2023 | Исправлено: Mavrikii, 09:40 26-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, выдается только кусок, запрашиваемый js кодом. Но кодировку то задать надо? utf-8
 
Для этой цели не подходит ?
 
header("Content-type: text/html; charset=utf-8");  

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 09:41 26-03-2023 | Исправлено: Vladsvn, 09:43 26-03-2023
Mavrikii

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

Цитата:
Но кодировку то задать надо? utf-8

надо. более того, нужен правильный content-type, иначе может не сработать.
для этого и выдаете
Цитата:
header("Content-type: text/html; charset=utf-8");

но это не "вместо". это всегда для html содержимого.

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 09:44 26-03-2023
Vladsvn

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

Цитата:
это проще хранить вообще в сессии, чтобы нельзя было подменить и подсмотреть чужие данные по чужому id.
Я так и сделаю. просто захотелось "отполировать" JS скрипт на будущее.
 
Ещё просьба.
 
Не могли бы Вы дописать конкретный код, чтобы окно закрывалось по клику на крестик или на поле вне окна?
 

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 09:48 26-03-2023 | Исправлено: Vladsvn, 10:04 26-03-2023
Mavrikii

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

Цитата:
Можете Вы дописать конкретный код, чтобы окно закрывалось по клику на крестик или на поле вне окна?

да хотя бы так. там привязка к id, он должен быть уникальный на странице, поэтому можно переписать все гораздо лучше, универсальнее, с привязкой по классу и к несуществующим еще элементам на странице (что могут быть созданы или добавлены позднее) - просто пример на скорую руку.
https://jsfiddle.net/a8250eo7/

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 10:07 26-03-2023
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как я ни старался, но Ваш код на живой странице не заработал. Посмотрите http://fh7929mi.bget.ru/test-23.html
 
На https://jsfiddle.net работает, а на HTML странице нет. Очень странно...

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 17:07 26-03-2023
Mavrikii

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

Цитата:
Очень странно..

ничего странного, код должен быть ниже элемента на странице. иначе на момент его запуска нужного элемента еще нет на странице. ну или инициализировать его при загрузке содержимого по событию DOMContentLoaded
https://www.javascripttutorial.net/javascript-dom/javascript-domcontentloaded/
 

Код:
document.addEventListener('DOMContentLoaded', () => {
// тут код, что я написал ранее
});

тогда он запустится после полной загрузки html содержимого страницы.

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 20:56 26-03-2023 | Исправлено: Mavrikii, 22:11 26-03-2023
Vladsvn

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

Всего записей: 351 | Зарегистр. 07-09-2016 | Отправлено: 14:15 28-03-2023 | Исправлено: Vladsvn, 16:53 28-03-2023
jason32



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть у меня скрипт, который прекрасно работал несколько лет в Tampermonkey - Unfocus yandex search . Его задача, что видно по названию  - снимать принудительный фокус с поля ввода яндекса, чтобы можно было переключаться между вкладками по обычным клавишам.  
 
  Но недавно скрипт перестал работать, что видимо связано с всеми этими сменами собственников в яндексе и изменениями кода страницы. Может кто пождскажет, как его обратно починить?  

Код:
// ==UserScript==
// @name        Unfocus yandex search
// @match       https://yandex.ru/*
// @run-at      document-end
// @grant       none
// @require http://code.jquery.com/jquery-latest.js
// ==/UserScript==
 
setTimeout(function(){var a = document.activeElement; a.tagName == "INPUT" && a.blur()}, 1e3);
window.onkeydown = function (a) {
    var b = a.target;
    var c;
    if (b.tagName != "INPUT") {
       c = document.activeElement;
       c.tagName == "INPUT" && c.blur()
    }
};
 
 

Всего записей: 715 | Зарегистр. 08-11-2004 | Отправлено: 16:06 29-03-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jason32
наверно же потому, что теперь поиск идет через dzen.ru, а не yandex.ru ?
 
+ // @require https://code.jquery.com/jquery-latest.js
но непонятно зачем он подключается, если не используется вообще.

Всего записей: 15687 | Зарегистр. 20-09-2014 | Отправлено: 16:37 29-03-2023 | Исправлено: Mavrikii, 16:43 29-03-2023
jason32



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

Цитата:
наверно же потому, что теперь поиск идет через dzen.ru, а не yandex.ru ?  

 
Не, страница то яндексная типа https://yandex.ru/search/?text=%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+&from=os&clid=1836587&lr=51 - речь про них. Мало ли че там на дзене
 
Да я и  проверял - alert добавлял, выскакивает как надо. А как добавить два сайта? Это вторую строчку match надо или через какие то символы - запятыя там?
 

Цитата:
+ // @require https://code.jquery.com/jquery-latest.js
но непонятно зачем он подключается, если не используется вообще.

Без понятия. s добавил - ниче не изменило

Всего записей: 715 | Зарегистр. 08-11-2004 | Отправлено: 16:56 29-03-2023 | Исправлено: jason32, 16:59 29-03-2023
Mavrikii

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

Цитата:
Без понятия. s добавил - ниче не изменило

можно убрать вообще строку, не используется.
 

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

и нет проблем.. может взаимодействует еще с каким то аддоном.
консоль ошибок браузера посмотрите и версию браузера. ну и как воспроизвести проблему.

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

Страницы: 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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru