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);