Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2019, 19:00
Новичок на форуме
Отправить личное сообщение для tatsuhiro007 Посмотреть профиль Найти все сообщения от tatsuhiro007
 
Регистрация: 23.07.2019
Сообщений: 2

Блок добавляется в геометрической прогрессии, а должен только один раз
Добрый день.
Прошу помощи.
Задача у меня такая - вывести блок на страницу с результатом работы скрипта.
Принцип действия следующий:
1. Страница с простой разметкой HTML.
2. При загрузки страницы по средствам JS-функции с AJAX-запросом запрашивается список сотрудников:
$.ajax({
		type: "POST", // метод отправки данных на сервер
		url: "../../inc/process.php", // адрес страницы, где будет обработан запрос
		data: {
			what: "showtable",
			table: table
		}, // данные, которые будут отправлены на сервер
		success: function(tableInfo){ // функция, которая будет вызвана в случае удачного завершения запроса к серверу
			// вставляем полученные из БД данные
			
			// захватываем форму и вставляем данные
			$("div#blocks div#blockLeft__table").html(tableInfo);
		}
	})
	// после получения данных
	.then(function() {
		// Редактирование Сотрудника
		editWorkerForm();
	});
	
	return false;

3. После получения данных в списке сотрудников пользователь щелкает на иконку "Редактировать" и по средствам JS-функции editWorkerForm() открывается всплывающее окно с формой редактирования сведений о сотруднике.
4. В форме меняются данные или не меняются данные и пользователь нажимает на кнопку "Изменить запись".
5. При отправке данные при клике на кнопку "Изменить запись" срабатывает код в JS-функции editWorkerForm()
function editWorkerForm(){
	$("table.links a[class*=editWorker]").each(function(index, value){
		// при клике на ссылку "Резолюция"				
		$(this).on("click", function(e){
			// прерываем действие по-умолчанию
			e.preventDefault();
			// для скрытого поля ID входящего документа устанавливаем значение атрибута VALUE
			$("form.editWorker input[type=hidden][name=worker_id]").attr("value", $(this).attr("data-workerid"));
			
			// Отправляем форму редактирования Сотрудника
			$("form.editWorker").on("submit", function(f) {
				f.preventDefault();
				
				// Формируем переменные
				// Массив параметров
				var workerParams = [
					// ФИО Сотрудника
					$("form.editWorker input#worker_fio").val()
					// ID редактируемого сотрудника
					, $("form.editWorker input[type=hidden][name=worker_id]").val()
				];
				// AJAX-запрос - Редактирование сотрудника
				aq_editWorker(workerParams);
			});
		});
	});
}

Внутри этой функции по средствам JS-функции aq_editWorker() по средствам AJAX-запроса отправляются данные на сервер и там обрабатываются по средствам PHP-функции:
function aq_editWorker($post) {
	$workerParams["worker_fio"] = $post["workerParams"][0]; // ФИО Сотрудника
	$workerParams["worker_id"] = $post["workerParams"][1]; // ID редактируемого Сотрудника
	// Обновление сведений о сотруднике
	// Параметры: массив данных из БД
	// Возвращает массив из: результат изменения, массив ошибок, массив предупреждений, массив успешных результатов, массив неуспешных результатов
	$update = update_inDB_worker($workerParams);
	// Проверяем работу скрипта
	if(isset($update[1])){
		echo createMessageBlock("../../", "errors", "ОЙ, ОШИБКИ", $update[1]);
	} else if(isset($update[2])){
		echo createMessageBlock("../../", "warning", "ВНИМАНИЕ", $update[2]);
	} else if(isset($update[3])){
		echo createMessageBlock("../../", "succes", "ПОЗДРАВЛЯЮ", $update[3]);
	} else if(isset($update[4])){
		echo createMessageBlock("../../", "fail", "НЕУДАЧА", $update[4]);
	}
}

PHP-Функция update_inDB_worker() вносит изменения в запись в БД. Возвращает она массив из: результата обновления (TRUE/FALSE), массива ошибок, массив ошибок, массив предупреждений, массив успешных результатов, массив неуспешных результатов.
6. Код JS-функции aq_editWorker()
$.ajax({
		type: "POST", // метод отправки данных на сервер
		url: "../../inc/process.php", // адрес страницы, где будет обработан запрос
		data: {
			what: "editWorker",
			workerParams: workerParams
		}, // данные, которые будут отправлены на сервер
		success: function(workerUpdate){ // функция, которая будет вызвана в случае удачного завершения запроса к серверу
			console.log(workerUpdate);
			// Добавляем блок с результатом работы
			//$("div.pageTitle").after(workerUpdate);
			// Обновляем список Сотрудников
			aq_objectsList("workers");
			// закрываем всплывающее окно
			hidePopupWindow("editWorker");
		}
	})
	// после получения данных
	.then(function() {
		
	});
	
	return false;


Проблема в выводе данных в переменной workerUpdate. В неё выводится блок с информацией о результате работы функции. Суть в том, что в рамках одной сессии работы (от момента загрузки страницы до момента её перезагрузки) сначала отображается один блок, потом два блока, потом три блока и т.д.
Просьба помочь)
Во вложении скрины для уточнения.
Изображения:
Тип файла: jpg 1111.jpg (14.3 Кб, 0 просмотров)
Тип файла: jpg 1112.jpg (12.9 Кб, 1 просмотров)
Тип файла: jpg 1114.jpg (22.7 Кб, 1 просмотров)

Последний раз редактировалось tatsuhiro007, 23.07.2019 в 19:09.
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2019, 22:03
Новичок на форуме
Отправить личное сообщение для tatsuhiro007 Посмотреть профиль Найти все сообщения от tatsuhiro007
 
Регистрация: 23.07.2019
Сообщений: 2

Разобрался. Можно закрыть тему.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
click выполняется один раз Karpo AJAX и COMET 4 22.01.2011 17:06
Выполнить только один раз событие onClick. exBill Events/DOM/Window 3 04.10.2010 22:04
Почему функция срабатывает один раз? Bogdan808 Javascript под браузер 4 06.09.2010 22:41
Окно открывается только один раз altermann ExtJS 8 22.04.2010 10:55
Чтоб ссылка появлялась один раз для каждого пользователя (по IP или Cookies) Sequoia Общие вопросы Javascript 2 28.01.2010 18:16