Ответы пользователя по тегу AJAX
  • Как вернуть значение обратно в web форму из NODE?

    zkrvndm
    @zkrvndm
    Архитектор решений
    document.querySelector('#info').innerHTML = info;
    Ответ написан
  • Как перейти по ссылке в фоне javascript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Запили обычную форму с методом GET, где вместо звезд будут стилизованные <input type="radio">
    Дальше кидай сюда ссылку и я покажу как сделанную тобой форму отправить аяксом, без перезагрузки страницы.
    Ответ написан
    Комментировать
  • Как обновлять данные без перезагрузки страницы?

    zkrvndm
    @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.error(err);
    		return false;
    	}
    }

    Вызывайте функцию elementUpdate() передав внутрь него CSS-селектор того элемента, который вы хотите обновить.

    Например, если хотите обновить div-блок который имеет класс test, то достаточно выполнить:
    elementUpdate('.test');

    Если хотите выполнять обновление каждую секунду, можно использовать цикл:
    // Запускаем функцию autoUpdate по готовности страницы:
    
    document.addEventListener('DOMContentLoaded', autoUpdate);
    
    // Функция для запуска цикла:
    
    async function autoUpdate() {
    	
    	// Бесконечный цикл:
    	
    	while (true) {
    		
    		// Обновляем блок .test:
    		await elementUpdate('.test');
    		
    		// Выжидаем 1000 миллисекунд перед повторением цикла:
    		await new Promise(function(s) { setTimeout(s, 1000); });
    		
    	}
    	
    }
    
    // Функция для обновления контента:
    
    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.error('При обновлении элемента '+selector+' произошла ошибка:', err);
    		return false;
    	}
    }
    Ответ написан
    2 комментария
  • Обновление содержимого div по кнопке без перезагрузки страницы?

    zkrvndm
    @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.error(err);
    		return false;
    	}
    }

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

    Если хотите привязать это действие к кнопке, то можете сделать так:
    <button onclick="elementUpdate('.soderzhimoye');">Нажми меня, чтобы обновить блок</button>
    Ответ написан
    1 комментарий
  • Почему через post не передаются данные?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Чтобы $_POST был НЕ пустым надо отправлять данные в кодировке application/x-www-form-urlencoded или multipart/form-data. Вы в своем примере пытаетесь отправить данные в кодировке application/json, при этом еще и неправильно это делайте.

    Попробуйте так:
    window.addEventListener('load', check); // Запуск check после полной загрузки страницы
    
    async function check() {
    	
    	var data = {
    		'test': 'Привет, мир!',
    		'myname': 'Дмитрий'
    	};
    
    	var response = await (await fetch('https://site.ru/script.php', {
    		'method': 'POST',
    		'headers': {
    			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    		},
    		'body': new URLSearchParams(data).toString()
    	})).text();
    
    	console.log('Ответ сервера:', response);
    	
    	return response;
    	
    }
    Ответ написан
  • Как плавно выводить ajax посты в wordpress?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте CSS для плавного появления:
    .container {
        animation: show 2s;
    }
    
    @keyframes show {
        from { opacity: 0; } to { opacity: 1; }
    }

    Где container это класс тех блоков, в которых лежат посты.
    Ответ написан
    Комментировать
  • Как передать файл и переменную через Ajax?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Добавьте вашу переменную к FormData:
    form_data.append('key', 'value');
    Перед отправкой.
    Ответ написан
    1 комментарий
  • Как получить тело запроса в событии onload?

    zkrvndm
    @zkrvndm
    Архитектор решений
    var original = {
    	open: XMLHttpRequest.prototype.open,
    	send: XMLHttpRequest.prototype.send
    };
    
    XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
    	console.log('Параметры запроса:', [method, url, async, user, password]);
    	return original.open.call(this, method, url, async, user, password);
    };
    
    XMLHttpRequest.prototype.send = function (data) {
    	console.log('Тело запроса:', data);
    	return original.send.call(this, data);
    };
    Ответ написан
    2 комментария
  • Почему при ajax подгрузке посты получаются в виде Html?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Считается, что так меньше нагрузка на браузер, мол не надо генерировать html-дерево на основе полученных данных, а просто берешь и сразу вставляешь на страницу готовый html-код который прислал сервер. Меньше нагрузка - быстрее отображаться данные, меньше лагов при прокрутке и так далее.
    Ответ написан
    Комментировать
  • Как php + js точно и легковесно определить, что на страницу зашел человек (для счетчика посещений)?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вешай реакцию на событие скрола, а чтобы дважды не отсылать, сохраняй статус отправки в переменную.
    Ответ написан
    1 комментарий
  • JS выход из for если внутри вызов функции ajax async с callback?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используй async / await:
    async function sample(arr) {
    	
    	for (var i = 0; i < arr.length; i++) {
    		
    		try {
    			
    			var result = await $.ajax({
    				url: '...',
    				dataType: 'jsonp',
    				type: 'GET',
    				delay: 250,
    				data: { q: arr[i] }
    			});
    			
    			if (result) {
    				
    				console.log('Получен ответ:');
    				console.dir(result);
    				
    			}
    			
    			else {
    				
    				console.log('Получен пустой ответ:');
    				console.dir(result);
    				
    				console.log('Прерываем цикл...');
    				
    				break;
    				
    			}
    			
    		}
    		
    		catch (err) {
    			
    			console.log('Ошибка:');
    			console.error(err);
    			
    			console.log('Прерываем цикл...');
    			
    			break;
    			
    		}
    		
    	}
    
    }
    Ответ написан
    Комментировать
  • Как вывод в консоль дожидается выполнения async функции?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Асинхроная функция всегда возвращает промис, вы своим console.log выводите отнюдь не результат, а тупо промис от функции. Далее, в консоли вполне можно запускать асинхронный код, попробуйте прямо сейчас вбить в консоли:
    response = await (await fetch('https://jsonplaceholder.typicode.com/users')).json();
    console.log(response);

    Или же применительно к вашему коду делайте так:
    async function func() {
      const response = await fetch('https://jsonplaceholder.typicode.com/users');
      return await response.json();
    }
    console.log(await func());
    Ответ написан
    Комментировать
  • Почему не получается отправить ajax запрос?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вот здесь вы передаете некорректный адрес:
    $.get('@Url.Action("InitialFavorite", "Home")')
    Вы передаете строку кода, а надо конкретную ссылку.
    Ответ написан
  • Можно ли разрешить просмотр только при Ajax-подгрузке страницы?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Делай так:
    <?php
    
    // Если мы получили GET-запрос:
    
    if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    	
    	header('Location:/', TRUE, 301); // Переадресуем на главную
    	
    }
    
    // Если мы получили POST-запрос:
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    	
    	// Выводишь данные, которые нужны
    	
    }

    Когда делаешь аякс-запрос, просто поменяй тип запроса с GET на POST.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы переход по пагинации оставался внутри ajax-страницы?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Грузите данные не в div а в iframe, тогда вся пагинация у вас будет происходит чисто внутри iframe не затрагивая основную страницу.
    $(function () {
        $("#show").one('click', function () {
              $("#container").html('<iframe src="page.html"></iframe>');
        });	
    });

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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вставь на странице с табами такой html-код и будет тебе счастье:
    <script>
    $(function() {
    	
    	// Ссылка на форму которую надо грузить без перезагрузки страницы:
    	var form = $('form[action="https://dev.itlvl.com/nashi-raboty/"]');
    	
    	// Вешаем на поля формы обработчик кликов:
    	
    	form.find('input[type="radio"]').click(async function(e) {
    		
    		e.preventDefault(); // Предотвращаем клик
    		form.css('pointer-events', 'none'); // Блокрируем повторные клики
    		
    		// Формируем ссылку на страницу которая содержит данные кликнутого таба:
    		var link = 'https://dev.itlvl.com/nashi-raboty/?' + $(this).attr('name') + '=' + $(this).val();
    		
    		var request = $.ajax(link); // Запускаем процесс загрузкки этой страницы
    		
    		// Пока грузится, делаем плавное исчезновение текущего таба:
    		await $('.grid-listing').animate({ opacity: 0 }, 500).promise();
    		
    		// Получаем те данные что загрузили и меняем URL в браузере:
    		var html = await request; history.pushState(null, null, link);
    		
    		// Удаляем атрибут активности со всех полей:
    		form.find('input[type="radio"]').removeAttr('checked');
    		
    		$(this).attr('checked', 'checked'); // Делаем активным текущий таб
    		
    		// Вставляем данные с нового таба на текущую страницу:
    		
    		var doc = new DOMParser().parseFromString(html, 'text/html');
    		
    		var html = $('.grid-listing', doc).html();
    		$('.grid-listing').html(html);
    		
    		var html = $('.listing-page__pagination', doc).html();
    		$('.listing-page__pagination').html(html);
    		
    		// Делаем плавное появление для вставленного контента:
    		await $('.grid-listing').animate({ opacity: 1 }, 500).promise();
    		
    		form.css('pointer-events', ''); // Снимаем блокировку кликов
    		
    	});
    	
    });
    </script>
    Ответ написан
  • Iframe как альтернатива ajax и отправка POST запросов?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Отправка данных через фрейм используется редко, в основном для обхода CORS, когда надо отправить запрос на чужой сайт с показом результата запроса во фрейме и при этом удержать посетителя на своем сайте. Еще иногда этот способ используют для переадресации на какой-то сайт со скрытием Referer, правда не знаю работает ли сейчас это способ, но раньше точно использовали.
    Ответ написан
    Комментировать
  • Как обновить блок с помощью ajax?

    zkrvndm
    @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 равный block, то достаточно выполнить:
    elementUpdate('div#block');

    Если хотите делать это циклически, каждую секунду, то можно использовать while:
    // Запуск асинхронного кода:
    
    (async function() {
    	
    	// Бесконечный цикл:
    	
    	while (true) {
    		
    		await elementUpdate('div#block'); // Обновляем блок
    		
    		// Выжидаем 1000 миллисекунд, а потом код внутри while выполняется вновь:
    		await new Promise(function(success) { setTimeout(success, 1000); });
    		
    	}
    
    })();


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

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте html элемент <form></form>, он сам отправит ваши файлы, достаточно указать адрес на который нужно отправлять.

    htmlbook.ru/samhtml5/formy/zagruzka-failov
    Ответ написан
    Комментировать
  • Как правильно передать с помощью fetch методом POST?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Не set, а append надо писать! Замените set на append.
    Ответ написан
    8 комментариев