Показать сообщение отдельно
  #1 (permalink)  
Старый 18.05.2019, 10:18
Аспирант
Отправить личное сообщение для izumov Посмотреть профиль Найти все сообщения от izumov
 
Регистрация: 05.05.2019
Сообщений: 72

Как же правильно вызывать запрос Ajax в функции?
У меня есть функция

function CheckFormItemUnical(col,colvalue){

var kod=document.getElementById('kod').value;
createRequest() ;
var url="proba8.php";
request.open("POST",url, false );
	request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
	  var data="kod="+kod+"&kol="+col+"&colvalue="+colvalue;
	  request.send(data);
	request.onreadystatechange = function() {
        if (request.readyState == 4) {
            if (request.status == 200) {
                alert(request.responseText);
			if(request.responseText=="0"){rez= true;return rez;}
			else{flagunical=false;rez= false;return rez;}
            } else {
				
                alert('error' + request.statusText);
            }
        }
}
return rez;}

Но так как запрос асинхронный то ответ приходит не всегда. иногда приходит пйстой ответ и функция из-за этого работает неправильно.
Эта функция тестирует значение на уникальность в базе данных в конкретной таблице по столбцу определяемому переменной
col.Если ответ с сервера приходит мгновенно все работает правильно. При задержке же ответа почему то responseText=""
а по логике функции это считается что тест не пройден.Так какответ- это количество строк в базе данных.ПРобовал делать синхронный запрос в отладчике вылазит предупреждение Что синхронный запрос в главном потоке- это устаревший метод. Подскажите как мне перестроить функциючтобы она правильноработала
серверный код
<?php
require"conect.php";
$data = array();
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $kol=$_REQUEST['kol'];
 $colvalue=$_REQUEST['colvalue'];
 $sql="SELECT  COUNT(*)
FROM clients
WHERE ";
$sql.=$kol;
$sql.=" =";
$sql.=$colvalue;
$sql.=" AND (kod <> ";
$sql.=$kod;
$sql.=")";
$stmt = $pdo->prepare($sql);
  // echo $sql;
   
   $stmt->execute();

$value = $stmt->fetchColumn(0);
echo  $value;
?>
Ответить с цитированием