我使用以下方法来调用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 == ".")
程序附近使用firebug设置断点并且返回true。如果我删除该断点函数总是返回false。我不明白为什么会这样。请帮忙!感谢。
答案 0 :(得分: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;
}
}
答案 1 :(得分:2)
为什么会这样
else {
return false;
$("#warning").show();
}
$("#warning").show();
永远不会被执行。
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;
}
答案 2 :(得分:2)
如果你想使代码工作,你应该使用$ .ajax方法而不是load并将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;
}
});
答案 3 :(得分: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;
}
还交换警告节目并返回以便执行