2012-04-17 5 views
3

なしの仕事:jqueryのAJAXいけない私は、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にしたい(私は "。"とそれを比較する)。変わったことは、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

申し訳ありません... thatsの:あなたは、同期要求を使用する必要があります返します関数内でboolean値をこのコードをラップすると、コールバック関数(ブロッキング手順)を必要としないためには

間違い。それを編集してください。 –

+0

ありがとう.....!今それは働いている! –

0

あなたの機能は稼働し続け、それがバックAJAXの応答を得て前に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; 
} 

はまた、警告表示をスワップし、それはあなたがそのコードの仕事をしたい場合は、代わりに負荷の$アヤックスメソッドを使用して、それを待つようにする場合はfalseに非同期(async)に設定する必要があり

+0

これでも問題は解決しません。 'validateEmaiAjax()'は 'undefined'を返すようになりました – DaveRandom

+0

はあなたのブール値の結果を返すように更新されました – idrumgood

+1

@idrumgood AJAXの応答が実際にそれを設定する前にまだ変数を返しています。 – Mathletics

2

を実行します返します応答のために。

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

ありがとう、ありがとう、ありがとう! –

関連する問題