jquery ajax не работает без точки прерывания firebug

Я использую следующий метод для вызова 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; } 

Также поменял место показом предупреждения и возвратил, чтобы он выполнял