Ответы пользователя по тегу AJAX
  • Выставление Cookie и получение их через Fetch API?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Токен нужно отдавать отдельным заголовком, не нужно его в куки помещать.
    Ответ написан
    Комментировать
  • Как получить статус Ajax в переменную?

    zkrvndm
    @zkrvndm
    Архитектор решений
    for (var i = 0; i < 250; i++) {
        
        var response = await $.ajax('api/page=' + i);
        
        console.log('Получены данные:');
        console.dir(response);
        
        // Здесь впиши условие остановки:
        
        if (условие) {
            
            i = 250; // Увеличиваем счетчик до 250, это приведет к остановке цикла
            
        }
        
    }
    
    // Здесь пиши дальше свой код

    Я без понятия, что тебе возвращает сервер, поэтому условие остановки вписывай сам.
    Ответ написан
  • Считается ли это xss (или другой) уязвимостью?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    $('.user_name')[0].innerHTML = user_name;
    По идее это не будет приводить к выполнению скрипта.
    Ответ написан
    Комментировать
  • Как повесить обработчик на динамический элемент?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вы должны тупо провесить обработчик на body.
    Ответ написан
  • Как сделать такой же переход по навигационным ссылкам, как у YouTube или ВКонтакте?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Используйте jQuery.ajax() для загрузки страниц без обновления.
    Ответ написан
    Комментировать
  • При сохранении JSON через AJAX почему сохраняется только определенное кол-во файлов?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вероятно на стороне сервера стоит плагинатор, который выдает результаты частями и постранично.
    Ответ написан
    Комментировать
  • Как сохранить по переменным полученные в ответе данные?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Откройте прямо сейчас консоль браузера и введите:
    response = await $.ajax('https://kachay.com.ua/calculation_info.php');

    В переменной response.data будут лежать все нужные вам параметры, можете обращаться к ним.
    Ответ написан
    Комментировать
  • Как сделать Ajax подгрузку содержимого html?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Пример:
    $('#id').load('https://yousite.ru/test.html');
    В содержимое блока #id будет загружены данные по ссылке.
    Ответ написан
    Комментировать
  • Поему ajax не возвращает ответ?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Попробуйте так:
    $(function () {
    	$("#ajax_form").submit(
    		async function(event) {
    			var form = new FormData(event.target);
    			event.preventDefault();
    			try {
    				var response = await $.ajax({
    					url: 'create-article.php',
    					type: 'POST',
    					data: form,
    					processData: false,
    					contentType: false
    				});
    				console.log("Ответ серввера:\n" + response);
    				alert("Ответ серввера:\n" + response);
    			}
    			catch(err) {
    				alert('Ошибка отправки, детали см. в консоли!');
    				console.log('Не удалось отправить форму:');
    				console.error(err);
    			}
    		}
    	);
    });
    Ответ написан
  • Как отправить данные на сервер с Ajax на чистом JavaScript?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Отправку данных делаете так:
    spoiler
    // Ждем когда элементы на странице прогрузятся:
    
    document.addEventListener('DOMContentLoaded', function() {
    
    	// Вешаем на кпопку обработчик клика, чтобы при каждом клике
    	// сразу запускалась функц я dataSend отвечающая за отправку данных:
    	
    	document.querySelector('.button').addEventListener('click', dataSend);
    	
    });
    
    // Функция для отправки данных на сервер:
    
    async function dataSend() {
    
    	// Получаем данные с нужных нам полей в переменные:
    	
    	var loginValue = document.querySelector('.login').value
    	var emailValue = document.querySelector('.email').value
    	var passwordValue = document.querySelector('.password').value
    	var conf_passwordValue = document.querySelector('.conf_password').value
    
    	// Создаем объект с данными:
    
    	var data = {
    		'login': loginValue,
    		'email': emailValue,
    		'password': passwordValue,
    		'conf_password': conf_passwordValue
    	}
    
    	// Конвертируем объект в JSON:
    
    	var json = JSON.stringify(data);
    
    	// Отправялеям полученный JSON на сервер обычным POST-запросом:
    
    	var response = await (await fetch('https://yousite.ru/handler.php', {
    		'method': 'POST',
    		'headers': {
    			'Content-Type': 'application/json; charset=utf-8'
    		},
    		'body': json
    	})).text();
    
    	// Выводим ответ сервера в консоли:
    
    	console.log('Ответ сервера:');
    	console.log(response);
    
    }

    Замените только ссылку на php-обработчик на свой. Далее, принимать данные отправленные, как JSON надо по другому. Пример получения данных отправленных, как JSON:
    spoiler
    <?php
    
    // Включим показ ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // Считываем полученный JSON:
    
    $json = file_get_contents('php://input');
    
    // Раскодируем JSON в массив:
    
    $array = json_decode($json, true);
    
    // Выведем массив, чтобы посмотиеть, что в нем:
    
    header('Content-Type: text/plain; charset=UTF-8'); // Указыавем браузеру, что ответ будет обычным текстом
    echo "Из браузера получены следующие данные:\n"; // Выведем текст-предупреждение
    print_r($array); // Выведем все, что находится в массиве
    Ответ написан
    7 комментариев
  • Как обновить html таблицу с php циклом?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если структура таблицы не меняется, вы можете полученную через AJAX таблцу распарсить через DOMParser, а далее тупо через querySelectorAll и цикл for перебрать все ячейки и обновить данные в вашей основной таблице.
    Ответ написан
  • Как правильно составить тело запроса при multipart/form-data?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Благодоря подсказе Alexandroppolus наконец удалось правильно собрать тело запроса, теперь все работает =)

    Пример ручной отправки файлов на сервер для будущих поколений:
    // Тестовый объект:
    
    test_obj = {
    	'per1': 'Привет!',
    	'per2': 'Это проверка!',
    	'per3': new File(['Привет, мир!'], 'test.txt', {type: 'text/plain'})
    };
    
    // Тестовая отправка:
    await multipartSend(test_obj);
    
    // Функция для отправки данных:
    
    async function multipartSend(obj) {
    	
    	// Генерируем уникальный разделитель:
    	var boundary = '----WebKitFormBoundary';
    	var symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    	for (var i = 0; i < 18; i++) { boundary += symbols.charAt(Math.floor(Math.random() * symbols.length)); }
    
    	var arr = [ ]; // Массив для записи тела запроса
    	
    	// Перебираем свойства отправляемого объекта:
    	
    	for (key in obj) {
    		
    		// Если текущее свойство объекта строка или число:
    		
    		if (typeof obj[key] == 'string' || typeof obj[key] == 'number') {
    			
    			// Добавляем значение текущего параметра в массив как строку, разумеется вместе с разделителем и метаданными:
    			arr.push("--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + key + "\"\r\n\r\n" + obj[key] + "\r\n");
    			
    		}
    		
    		// Если текущее свойство объекта файл:
    		
    		else if (typeof obj[key] == 'object') {
    			
    			if (typeof obj[key]['name'] !== 'undefined' && typeof obj[key]['type'] !== 'undefined') {
    				
    				// Добавляем метаданные от файла и разделитель, как обычную строку:
    				arr.push("--" + boundary + "\r\nContent-Disposition: form-data; name=\"" + key.replace(/\[[0-9]*\]$/, '[]') + "\"; filename=\"" + obj[key]['name'] + "\"\r\nContent-Type: " + obj[key]['type'] + "\r\n\r\n");
    				
    				arr.push(obj[key]); // Сам файл добавляем целиком, как есть
    				
    				arr.push("\r\n"); // И не забываем про перенос строкки с конца
    				
    			}
    			
    		}
    		
    	}
    
    	arr.push("--" + boundary + "--\r\n"); // Добавляем последний разделитель в массив
    	var body = new Blob(arr); // Формируем тело запроса (бинарник) для отправки из собранного ранее массива
    	
    	// Отправляем бинарник и смотрим результат:
    	
    	var response = await (await fetch('https://nadim.work/test.php', {
    		'method': 'POST',
    		'headers': {
    			'Content-Type': 'multipart/form-data; boundary=' + boundary
    		},
    		'body': body
    	})).text();
    	
    	console.log(response);
    	
    	return response;
    
    }
    Ответ написан
  • Как передать еще одно значение и получить в ajax?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Я правильно понимаю, что вы хотите AJAX-ом отправить некую форму со страницы, но добавив к отправляемым данным какие-то дополнительные данные?
    Ответ написан
    Комментировать
  • XMLHttpRequest запрос к ip адресу по http без сертификата?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Можно, если запрос совершается с того же источника, в вашем случае это http://0.0.0.0:8080
    Ответ написан
  • Как правильно передать переменную через ajax?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Метод GET предполагает передачу данных в адресной строке. Например, при открытии такой ссылки:
    https://yousite.ru/include/ajax.php?per1=test&per2=test

    Ваш PHP обработчик получит это данные, как $_GET['per1'] и $_GET['per2']

    Думаю очевидно, что метод GET может передавать только текст? И при этом размер текста сильно ограничен, так как ссылки физически не могут быть больше 2048 символов.

    Если вы хотите отправлять файл именно методом GET, вам нужно файл конвертировать в base64-текст и уже этот текст отправлять, но не как переменную, а непосредственно в теле запроса, при этом контент-тип запроса должен быть plain/text - в теле запроса уже не будет ограничений на объем передаваемой информации.

    Однако, не проще ли будет отправлять файл POST-ом, почему вы от него отказались?
    Ответ написан
    Комментировать
  • Ajax как передать файл из input type=file и принять в php?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Отправляйте саму форму, а не сериализованные данные. Пример:
    $(document).on('submit', '#form-job-modal-wrapper', function (e) {
            $.ajax({
                type: 'POST',
                url: 'action_ajax_form.php',
                data: new FormData(this),
                success: (data) => {
                    $('#jobModal').html(data);
                    $( window ).resize();
                }
            });
    
            e.preventDefault();
    });
    Ответ написан
    Комментировать
  • Почему не отправляется форма через ajax, не передается изображение?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Вот эту конструкцию в коде:
    $('#myform').serialize()
    Замени на:
    new FormData($('#myform')[0])
    И тогда все заработает.
    Ответ написан
    2 комментария
  • Как обезопасить файл от прямого доступа?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Установите пароль, чтобы доступ был только если совершен POST-запрос с паролем.
    Ответ написан
  • Как в 1 файл php из js передать несколько массивов с помощью AJAX?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Это все делается достаточно просто. Ниже пример отправки данных при помощи jQuery.ajax()
    async function sendInfo() {
    
    	let arr1 = [1, 2, 3, 4, 5];
    	let arr2 = ['a', 'b', 'c', 'd', 'e'];
    
    	var response = await $.ajax({
    		url: 'test.php',
    		method: 'POST',
    		cache: false,
    		data: {
    			'arr1': arr1,
    			'arr2': arr2
    		}
    	});
    
    	console.log('Данные успешно отправлены, ответ сервера: ' + response);
    	
    	return response;
    
    }

    Просто вызовите функцию sendInfo() и увидите результат запроса в консоли.

    Должен предупредить, что для работы функции jQuery.ajax() у вас обязательно должна быть подключена библиотека jQuery, для этого добавьте перед закрывающим тегом </head> на своем сайте следующий скрипт:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>


    P. S. На стороне PHP скрипта вам надо смотреть переменные $_POST['arr1'] и $_POST['arr2'] - именно там будут лежать отправленные вами данные.
    Ответ написан
    Комментировать