Я использую следующий метод для вызова php:
function validateEmaiAjax(email){ val = null; $("#warning").load("https://localhost/Continental%20Tourism/register_ajax.php",{email: email}, function(rspns, stat, xml){ val = rspns; }); if(val == ".") return true; else { return false; } }
мой php-код:
<?php $dbc = mysqli_connect("localhost","root","pass","continental_tourism") OR die(mysqli_connect_error()); $email = $_REQUEST['email']; $query = "SELECT email FROM customer_info WHERE email = '$email' "; $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc)); if(mysqli_num_rows($r) > 0) echo "Email address exists!"; else echo "."; ?>
В основном это проверяет базу данных, и если существует электронная почта, «Адрес электронной почты существует!» если нет, я хочу return true
(поэтому я эхо «.» и сравните его). Странно, если я поставил точку останова, используя firebug рядом, if(val == ".")
Программа работает правильно и возвращает true. Если я удаляю эту функцию точки останова, всегда возвращаю false. Я не могу понять, почему это происходит. Пожалуйста помоги! Благодарю.
Причина, по которой у вас возникла эта проблема, заключается в том, что вы выполнили асинхронный запрос. Это означает, что if(rspns == ".")
Будет достигнут до того, как ответ будет получен с сервера, и результат всегда будет false
.
Чтобы обернуть этот код в функцию, возвращает логическое значение и не требует функции обратного вызова (процедура блокировки), вам нужно будет использовать синхронный запрос:
function validateEmaiAjax(email) { // This is the correct way to initialise a variable with no value in a function var val; // Make a synchronous HTTP request $.ajax({ url: "https://localhost/Continental%20Tourism/register_ajax.php", async: false, data: { email: email }, success: function(response) { // Update the DOM and send response data back to parent function $("#warning").html(response); val = response; } }); // Now this will work if(val == ".") { return true; } else { $("#warning").show(); return false; } }
Если вы хотите сделать этот код, вы должны использовать метод $ .ajax вместо загрузки и установить async в false, чтобы заставить его ждать ответа.
http://api.jquery.com/jQuery.ajax/
$.ajax({ url:"https://localhost/Continental%20Tourism/register_ajax.php", async: false, data: {email: email}, success: function(rspns, stat, xml){ val = rspns; } });
Почему это
else { return false; $("#warning").show(); }
$("#warning").show();
никогда не будут выполнены.
EDIT: Там я иду:
function validateEmaiAjax(email){ var URL = 'https://localhost/Continental%20Tourism/register_ajax.php'; var Args = {email: email} $('#warning').load(URL, Args, function(html){ if(html == '.'){ return true; } else { $('#warning').show(); return false; } }); return false; }
Или вы можете попробовать это также:
function validateEmaiAjax(email){ var URL = 'https://localhost/Continental%20Tourism/register_ajax.php'; var Args = {email: email} $.ajax({ url: URL, type: 'GET' data: Args, success: function(html){ if(html == '.'){ return true; } else { $('#warning').show(); return false; } } }); return false; }
Это связано с тем, что ваша функция продолжает работать и попадает в if(val == ".")
Прежде чем она вернет ответ ajax. Внутри функции обратного вызова ajax необходимо использовать только этот оператор if.
function validateEmaiAjax(email){ var success; $("#warning").load("https://localhost/Continental%20Tourism/register_ajax.php",{email: email}, function(rspns, stat, xml){ if(rspns == ".") success = true; else { $("#warning").show(); success = false; } }); return success; }
Также поменял место показом предупреждения и возвратил, чтобы он выполнял