2012-04-17 1 views
3

Я использую следующий метод для вызова PHP:JQuery Ajax не работают без точки поджигателя перерыва

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. Я не могу понять, почему это происходит. Пожалуйста помоги! Благодарю.

ответ

5

Причина у вас есть эта проблема, потому что вы выполнили асинхронный запрос. Это означает, что 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; 
    } 

} 
+0

Спасибо .....! Теперь он работает.! –

+0

Отличная статья. Спасибо за такое объяснение. Теперь я понял. Еще раз спасибо. –

2

Почему это

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; 
} 
+0

извините ... то будет ошибка. Я его отредактировал. –

+0

Спасибо .....! Теперь он работает.! –

0

Это потому, что ваша функция продолжает работать, и попадает в if(val == "."), прежде чем он получил ответ АЯКС назад. Внутри функции обратного вызова 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; 
} 

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

+0

Это еще не решит проблему. 'validateEmaiAjax()' теперь будет возвращать 'undefined' – DaveRandom

+0

обновленный, чтобы возвращать ваши логические результаты – idrumgood

+1

@idrumgood, вы все равно возвращаете переменную до того, как ее на самом деле задает ответ AJAX. – Mathletics

2

Если вы хотите, чтобы сделать этот код работать, вы должны использовать метод вместо нагрузки $ .ajax и установить асинхронной ложь, чтобы сделать его ждать для ответа.

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; 
    } 
}); 
+0

Спасибо .....! Теперь он работает.! –

+0

Спасибо, спасибо, спасибо !!! –

Смежные вопросы