@Simple91

Несколько операции, один $.ajax запрос, один php файл?

Привет хабр!
Суть задачки: Я делаю мобильное приложение на cordova.
На клиентской стороне: js,jquery,html
На серверной стороне: php, mysql
Обмен данными: Json
Я уже написал достаточно количество кода, на js,jquery и php. И с каждым днем, я добавляю функционал. Проблема в том, я не использую фреймворки кроме jquery. В последнее время сам не понимаю свой старый код. С ужасом сегодня увидел что я часть подключения к базе данных делал на старых mysql командах, а часть сделана на PDO. Скажу сразу, что я пока программирую процедурно, без ооп.

Другая проблема в ajax запросах и обработка запросов на сервере php скриптами. Для каждой кнопки, у меня отдельный ajax запрос и отдельный php скрипт на сервере который принимает этот запрос. Проблема в читабельности кода, на одной html странице в клиенте, когда там 5 отдельных ajax запросов, чуть подвисает даже sublime text.

Вопрос Можно ли как то всю эту кучу скриптов собрать в кучу, через один ajax запрос на один php скрипт, который будет принимать на сервере?

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

ps: Я специально делал все отдельными, чтобы не запутаться и было легче отлаживать код
  • Вопрос задан
  • 2517 просмотров
Решения вопроса 1
RequestBlock == true; // разрешаем в глобале запросы

$('html').on('click','.element',function() {
	var data =  {
		RequestHead: {
			RequestTarget:'somePhpFunction', // вызываемая функция php, любое имя
			RequestType:'Update' // тип
		}, 
		RequestData: {
			select:'0' // id
		}
	}
	var data = JSON.stringify(data);

	var s = {
		type:'POST',
		url:'lib/CONNECT.php',
		data:data,
		dataType:'json',
		parent:'somePhpFunction'
	};

	SendData(s); // отправляем данные
});




function SendData(s) {
	if (s.type && s.type.length || s.url && s.url.length || s.data && s.data.length || s.dataType && s.dataType.length || s.parent && s.parent.length) {
		if (RequestBlock == false) {
			console.log('выполняется другой запрос');
		} else if (RequestBlock == true) {
			RequestBlock = false; // блокируем параллельный запрос, ждем выполнения текущего

			$.ajax({
				type: s.type,
				url: s.url,
				data: s.data,
				cache: false,
				dataType: s.dataType,
				timeout: 15000,
				success: function(r) {
					RequestBlock = true; // для избежания ошибок получения данных не той функцией - блокируем повтороную отправку данных переменной RequestBlock. Теряем ассинхронность, зато упрощаем логику отправки и приема данных
					SendSuccess(s, r);
				},
				error: function(jqXHR, textStatus, errorThrown) {
					RequestBlock = true;
					if (textStatus === 'timeout' || textStatus === 'abort' || textStatus === 'parsererror') {
							console.log('ошибка');
					} else if (textStatus === 'error') {
							console.log('ошибка');
					} else {
						SendError(s, r);
					}
				}
			});
		}
	}
}



function SendSuccess(s, r) {

	if (s.parent == 'somePhpFunction') {
		RsponseForSomePhpFunction = r; // выносим в глобал уникальную переменную или передаем функции
		JsSomePhpFunction(r);
		// вызываем функцию пост-обработки
	}
}



function SendError(s) {
	if (s.parent == 'somePhpFunction') {
		console.log('ошибка');
	}
}


$RequestParameters = json_decode(file_get_contents("php://input"));

		if (!empty($RequestParameters->RequestHead) || !empty($RequestParameters->RequestData)) {
			if (!empty($RequestParameters->RequestHead->RequestTarget) || !empty($RequestParameters->RequestHead->RequestType)) {
				if ($RequestParameters->RequestHead->RequestTarget == 'somePhpFunction') {

					// если надо, можно прямо тут задействовать RequestType
					$Result = somePhpFunction($RequestParameters); // вызываем функцию

				}
			} else {
				$Result = array(
					'ResponseStatus' => "error", 
					'ResponseData' => "error: 0002"
				);
			}
		} else {
			$Result = array(
				'ResponseStatus' => "error", 
				'ResponseData' => "error: 0001"
			);
		}

		echo json_encode($Result);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
akubintsev
@akubintsev
Опытный backend разработчик
Почитайте Боба Мартина "Чистый код", на мой взгляд основа нормальной организации кода.
По поводу советов коллег по цеху - оно всё правильно, только не факт, что вы сделаете так, как следует. Лучше всего если вы найдете опытного программиста для ревью и помощи в рефакторинге. Тут как с тренером или коучем: несколько занятий для понимания основных принципов как правильно делать, а дальше как душе угодно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы