У меня есть эта функция, где на onkeyup он проверяет номер мобильного телефона, существует ли он в базе данных уже или нет, теперь проблема в том, что даже если ответ «истина», он всегда будет отображаться как ложь
PHP
elseif ($action == 'check_mobile_phone')
{
$mobile = trim($_GET['mobile']);
$mobile = json_str_iconv($mobile);
if (mobile_register($mobile))
{
echo 'false';
}
else
{
echo 'true';
}
}
Ajax Call
function checkMobilePhone(mobile)
{
if (mobile == '')
{
error.find('#mobile_notice_text').html('Mobile number cant be empty.');
submit_disabled = true;
}
else if (!Utils.isMobile(mobile))
{
error.find('#mobile_notice_text').html('Please enter mobile number in local format.');
}
if ( submit_disabled )
{
document.forms['formUser'].elements['Submit'].disabled = 'disabled';
return false;
}
Ajax.call( 'user.php?act=check_mobile_phone', 'mobile=' + mobile, check_mobile_callback , 'GET', 'TEXT', true, true );
}
Ответ
function check_mobile_callback(result)
{
var logform = $('form[name = "formUser"]');
var error = logform.find('#mobile_notice');
if ( result === "true" )
{
document.forms['formUser'].elements['Submit'].disabled = '';
}
else
{
error.find('#mobile_notice_text').html('Phone number already exists.');
document.forms['formUser'].elements['Submit'].disabled = 'disabled';
}
}
Если вы действительно возвращаете текстовый ответ от вызова AJAX (что не очень хорошая идея), проверьте, нет ли пробелов в возвращаемом значении. Попробуйте добавить result.trim() в оператор if. В противном случае я бы предложил вернуть JSON или другую форму сериализованной структуры данных.
Этот код так сложно читать, в первую очередь попробуйте провести рефакторинг кода, сделать его проще. Возможно, вы решите свой код, сделав это.
Единственные две важные строчки в коде - это Ajax.call( 'user.php?act=check_mobile_phone', 'mobile=' + mobile, check_mobile_callback , 'GET', 'TEXT', true, true ); и if ( result === "true" ). Что возвращает этот Ajax.call()? изменить: я имею в виду, что он передает обратному вызову?
добавьте отладчик в обратный вызов и посмотрите, что в результате. Оттуда вы можете легко понять, что не так с вашим кодом.
Пожалуйста, проверьте сообщение, я обновил код и добавил код PHP.
Вы пробовали добавить debugger в check_mobile_callback() и посмотреть, что такое переданная переменная result?
Кажется, что в ответе есть пробел, я изменил код и добавил пробел перед истиной, и он начал работать, если (результат === "истина")
@SPK в порядке, но вместо этого вы должны исправить ошибочный ответ вместо того, чтобы делать неприятный обходной путь в вашем операторе if. Если у вас плохие данные, рассортируйте их, вместо того чтобы делать систему зависимой от них. Как уже упоминалось, было бы гораздо лучше вернуть JSON с сервера с истинным логическим значением true / false вместо строки, тогда у вас не может быть такой проблемы с пробелами или скрытыми символами.
пожалуйста, отправьте код для этого метода mobile_register ($ mobile)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


function mobile_register($mobile)
{
$res = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['db']->table('users') .
" WHERE mobile_phone = '$mobile'");
return $res;
}
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
if ( result === "true" )-> результат может бытьboolean, попробуйтеif (result)илиif ( result == "true" )