• Не приходят данные с POST ajax?

    @zkrvndm
    Софт для автоматизации
    Внутри файла mail.php вы должны не просто принять файл, а записать принятые данные куда-нибудь, чтобы потом их можно было посмотреть. Например, вы можете записывать полученные данные в текстовый файл - для этого разместите внутри mail.php следующее содержимое:
    <?php
    
    header('Access-Control-Allow-Origin: *'); // Разрешаем запросы с любых сайтов
    header('Content-Type: text/plain; charset=utf-8'); // Указываем тип ответа (обычный текст) и кодировку
    
    // На всякий случай включаем отображение ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // В переменную $received пишем нужную нам информацию:
    
    $received = "Последний принятый POST-запрос содержал следующие данные:\n\n" . print_r($_POST, true);
    
    // Сохраняем содержимое переменной $received в файл post.txt и результат операции записываем в переменную $save (сохранилось или нет):
    
    $save = file_put_contents('post.txt', $received);
    
    // Если файл сохранить не удалось выводим соответствующее предупреждение:
    
    if ($save === false) {
    	
    	echo 'Ошибка, не удалось записать информацию в файл post.txt';
    	
    }
    
    // Если же все сохранилось успешно выводим уведомление об этом:
    
    else {
    	
    	echo 'Данные успешно сохранены в файле post.txt';
    	
    }


    Ну и справедливости ради POST-запрос вы отправляйте криво. Оно конечно и так будет работать, но с вашим кодом вы не увидите ответа сервера, поэтому надо делать так:
    $.ajax({
    	url: '/wp-content/themes/lk/pages/mail.php',
    	method: 'POST',
    	cache: false,
    	data: { 'message' : 'Привет мир!' },
    	success: function(response) {
    		console.log('Запрос успешно отправлен. Ответ сервера:');
    		console.dir(response);
    	},
    	error: function(err) {
    		console.log('При отправке запроса произошла ошибка, детали:');
    		console.dir(err);
    	}
    });
    Ответ написан
  • Почему не работает POST запрос с ответом на другой сайт?

    @zkrvndm
    Софт для автоматизации
    Используйте GET-запрос при помощи file_get_content() и тогда код получится в разы проще и понятнее.
    Ответ написан
    Комментировать
  • Как сделать сheckbox не активным, если input не заполнено?

    @zkrvndm
    Софт для автоматизации
    Вы можете использовать CSS-селекторы соседей. JavaScript здесь не нужен.

    Пример:
    Ответ написан
    Комментировать
  • Можно ли в браузере использовать расширенный JS (как через консоль)?

    @zkrvndm
    Софт для автоматизации
    В консоли можно писать сложный код, для переноса строки зажимайте шифт и только потом жмете интер, но обычно для запуска JavaScript на сайтах использую специальные браузерные расширения. Через консоль конечно тоже можно запускать и парсить, но это банально неудобно.
    Ответ написан
    Комментировать
  • Как проверить, является ли параметр callback-функции конкретной строкой?

    @zkrvndm
    Софт для автоматизации
    Где гарантии, что в clientPreferences лежит строка, а не какой-нибудь объект или функция? Нет таких гарантий, поэтому имеет смысл сначала проверить тип переменной при помощи typeof и только если она string проверять на совпадение со словом vegan.
    Ответ написан
    3 комментария
  • Как с помощью PHP получить родительский узел DOM-элемента?

    @zkrvndm
    Софт для автоматизации
    Там точно те же методы, что и у браузерного jQuery. Попробуйте так:
    <?php
    include 'phpQuery-onefile.php';
    
    $site = file_get_contents($source_url);
    $document = phpQuery::newDocument($site);
    
    $a = $document->find('a.test');
    
    $result = pq($a)->parent()->html();
    
    echo $result;
    ?>


    По идее должно найти ссылку с классом test и вывести html код родительского элемента, но надо тестить.
    Ответ написан
    1 комментарий
  • Как получить значение из resolve в return?

    @zkrvndm
    Софт для автоматизации
    Попробуйте так:
    function asd() {
      return new Promise (function(resolve, reject) {
        socket.on('событие', data => {
          resolve(data);
        });
      });
    }
    
    test = await asd();
    console.log(test);
    Ответ написан
    1 комментарий
  • Как указать аудио файл находящийся в папке с проектом на JS?

    @zkrvndm
    Софт для автоматизации
    Не совсем понятно, где выполняется код.

    Если код выполняется в браузере, то файл можно подгрузить в поле так:
    async function pasteAudio() {
    	
    	var blob = await (await fetch('https://ссылка_на_ваш_аудиофайл')).blob();
    	
    	var dt = new DataTransfer();
    	dt.items.add(new File([blob], 'audio_name.mp3', {type: 'audio/mpeg'}));
    	document.getElementById("fileInput").files = dt.files;
    	
    	document.getElementById("fileInput").dispatchEvent(new Event('change'));
    	
    }
    
    pasteAudio();

    Предполагается, что ваше аудио доступно по ссылке и находится на том же сайте, на котором вы выполняйте код.

    P. S. Кстати, поле выбора файлов здесь использовать вовсе не обязательно, можно его исключить при желании.
    Ответ написан
    Комментировать
  • Пишу chrome расширение. При нажатии на кнопку нужно выполнять JS функцию. Как это реализовать?

    @zkrvndm
    Софт для автоматизации
    Стоит учитывать, что тег script в html файле запрещён

    Он не запрещен, просто в файлах расширения скрипты надо цеплять в виде ссылки, а не вставлять инлайново.
    Ответ написан
    Комментировать
  • Как зафиксировать существует или нет переменная?

    @zkrvndm
    Софт для автоматизации
    Проверяй тип:
    if (typeof resultLength == 'undefined') {
        console.log('Переменная не существует');
    }
    Ответ написан
    Комментировать
  • Умножение чисел в каждой строке table?

    @zkrvndm
    Софт для автоматизации
    Используйте функцию querySelctorAll() для нахождения строк и ячеек и цикл for() для их обхода и манипуляции значениями. Предполагается, что вы в принципе знаете, как умножать на JavaScript и работать с переменными. Если же нет, то вам явно на фрилансим.
    Ответ написан
    Комментировать
  • Поиск сайтов по списку и парсинг данных. Такое возможно?

    @zkrvndm
    Софт для автоматизации
    Мой опыт говорит, что такой парсер вполне реально написать, там сложности могут быть лишь с обходом защиты поисковых систем. Но бесплатно вам такой парсер никто не предоставит, обращайтесь на фрилансим и заказывайте под себя.
    Ответ написан
    5 комментариев
  • Как обновить элемент без перезагрузки страницы?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Пример функции для выборочного обновления контента:
    async function elementUpdate(selector) {
    	try {
    		var html = await (await fetch(location.href)).text();
    		var newdoc = new DOMParser().parseFromString(html, 'text/html');
    		document.querySelector(selector).outerHTML = newdoc.querySelector(selector).outerHTML;
    		console.log('Элемент '+selector+' был успешно обновлен');
    		return true;
    	} catch(err) {
    		console.log('При обновлении элемента '+selector+' произошла ошибка:');
    		console.dir(err);
    		return false;
    	}
    }

    Вызывайте функцию elementUpdate() передав внутрь него CSS-селектор того элемента, который вы хотите обновить. Например, если взять таблицу, которая имеет id равное test, то достаточно выполнить:
    elementUpdate('table#test');

    Если хотите привязать это действие к кнопке, то можете сделать так:
    <button onclick="elementUpdate('table#test');">Нажми меня, чтобы обновить таблицу</button>
    Ответ написан
    2 комментария
  • Как отправить отзыв из сайта на Gmail?

    @zkrvndm
    Софт для автоматизации
    Попробуйте этот сервис:
    https://www.emailjs.com/
    Ответ написан
    Комментировать
  • Как преобразовать JavaScript-объект в строку формата application/x-www-form-urlencoded?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Нашел в сети упоминание, что у конструктора new URLSearchParams() имеются встроенные методы для получения строки запроса, то есть мы можем используя чисто нативные методы сформировать тело запроса:
    var objeto = { 'raz' : 'Первое свойство', 'dva' : 'Второе свойство' };
    
    var params = new URLSearchParams();
    
    for (var prop in objeto) {
    	params.append(prop, objeto[prop]);
    }
    
    console.log(params.toString());

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

    Используя этот метод за основу написал рекурсивный конвертер, который может преобразовывать в строку запроса объекты любого уровня вложенности сколь бы сложные они не были:
    // Функция для преобразования объекта
    // в строку формата x-www-form-urlencoded:
    
    function httpBuildQuery(object_to_convert) {
    	
    	var params = new URLSearchParams();
    	
    	var paramsGenerator = function(parent_key, iterate_object) {
    		
    		for (var current_key in iterate_object) {
    			
    			if (typeof iterate_object[current_key] == 'string' || typeof iterate_object[current_key] == 'number') {
    				
    				if (parent_key.length > 0) {
    					var property_path = parent_key + '[' + current_key + ']';
    				} else {
    					var property_path = current_key;
    				}
    				
    				params.append(property_path, iterate_object[current_key]);
    				
    			} else if (typeof iterate_object[current_key] == 'object') {
    				
    				if (parent_key.length > 0) {
    					var property_path = parent_key + '[' + current_key + ']';
    				} else {
    					var property_path = current_key;
    				}
    				
    				paramsGenerator(property_path, iterate_object[current_key]);
    				
    			}
    			
    		}
    		
    	}
    	
    	paramsGenerator('', object_to_convert);
    	
    	return params.toString();
    	
    }
    
    // Потестируем работу функции на примере:
    
    var test_object = {
    	'raz' : 'Первое свойство',
    	'dva' : 'Второе свойство',
    	'tri' : {
    		'test' : 'Тест',
    		'proverka' : 'Проверка',
    		'massiv' : [
    			'aaa',
    			'bbb',
    			'ccc',
    			{
    				'lalala' : 'lololo',
    				'tratata' : 'trototo'
    			},
    			123,
    			345,
    			567
    		]
    	}
    };
    
    var send_string = httpBuildQuery(test_object);
    
    var response = await (await fetch('https://nadim.work/post_view.php', {
    	method: 'POST',
    	headers: {
    		'Content-Length' : send_string.length,
    		'Content-Type' : 'application/x-www-form-urlencoded'
    	},
    	body: send_string
    })).text();
    
    console.log(response);

    Если забьете этот код в консоль увидите, что функция прекрасно справляется с преобразованием. Оставляю код для будущих поколений, надеюсь он еще много кому пригодится, особенно если вам нужно отправить типовой POST-запрос именно через fetch() не используя конструктор new FormData() совсем.
    Ответ написан
    2 комментария
  • Расширение для chrome под web telegram не работает click(), что делаю не так?

    @zkrvndm
    Софт для автоматизации
    Для того, чтобы сработала отправка сообщения, нужно вызывать на кнопке SEND событие MOUSEDOWN:
    document.querySelector('span[data-content="Send"]').dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));
    Ответ написан
    1 комментарий
  • Как спарсить значение нужного td?

    @zkrvndm
    Софт для автоматизации
    У вас в корне не верный подход. Для поиска номеров лучше всего тупо перебирать ячейки в лоб и проверять текст на соответствие регулярному выражению. Правильно составленная регулярка без проблем вытащит вам все телефоны даже если они в разных форматах записаны.
    Ответ написан
    Комментировать
  • На каком хостинге делать средний проект?

    @zkrvndm
    Софт для автоматизации
    Если нагрузка менее 500 - 700 просмотров в день, можете делать на бесплатном:
    https://beget.com/ru/free-hosting
    По крайней мере, я однажды тестил там CMS Joomla и в принципе держало до 1000 просмотров в день примерно, а дальше все упиралось в лимиты и получал блок. Если сайт у вас легкий, то думаю цифры примерно такие же будут.
    Ответ написан
  • Как написать комментарий с помощью JS в Facebook?

    @zkrvndm
    Софт для автоматизации
    Вы должны в поле ввода вызвать клавиатурные события отвечающие за ввод, чтобы страница увидела изменения:
    var span = document.querySelector('span[data-text="true"]');
    
    span.focus();
    span.innerHTML = 'Новый текст';
    span.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
    span.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
    span.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
    span.dispatchEvent(new Event('input', { bubbles: true }));
    span.dispatchEvent(new Event('change', { bubbles: true }));
    Ответ написан
    2 комментария
  • Можно ли как то при заходе на любой сайт выполнять js код?

    @zkrvndm
    Софт для автоматизации
    Таких расширений полно, например можете использовать этот:
    https://chrome.google.com/webstore/detail/custom-j...
    Ответ написан
    Комментировать