[英]Why isn't this AJAX call executing properly?
我正在建立一个网站,该网站根据用户可以输入的促销代码提供折扣。 在处理新注册之前,我有必要验证代码是否存在于我们的数据库中。 这是我用于验证的AJAX调用:
if (promo_code) {
var returned = true;
$.ajax({
type: "POST",
url: "/ajax/validate_promo_code.php",
data: {promo_code: promo_code},
success: function(result) {
if (result == 0) {
$('#blank_dialog_popup').html('<span class="message_text_big">Sorry, that promo code is not valid.</span>').addClass('message_warning').css('display', 'block').css('z-index', '1003');
setTimeout(returnMessageBackground, 3000);
$('#promo_code').focus();
returned = false;
}
}
});
if (returned != true) {
return false;
}
}
这是我用于验证的整个PHP文件。
<?php
//ini_set('display_errors',1);
//error_reporting(E_ALL|E_STRICT);
$db = new Database();
$promo_code = filter_var(intval($_POST['promo_code']), FILTER_VALIDATE_STRING);
$check_query = "SELECT id FROM users WHERE promo_code = '$promo_code'";
$db->query($check_query);
if ($db->num_rows != 1) {
return 0;
} else {
return 1;
}
?>
即使我注释掉PHP文件中除“ return 0;”之外的每一行代码,成功字段也不会执行。 并摆脱了AJAX调用中的“ data:”行,这使我认为我的代码存在一些可怕的错误,但是我一生都无法找出原因。 谢谢你的帮助!
首先,如@Quentin所说,您需要使用echo或print。
第二:
AJAX请求为aysnc。 这意味着代码不会按顺序执行,但是稍后会在服务器响应之后调用success()
函数。 我的意思是这部分
if (returned != true) {
return false;
}
因为您将更改仅异步执行的success()
方法中returned
的值,所以将永远不会执行。
这是一个摆弄异步UI内容的示例: https : //jsfiddle.net/xpvt214o/663873/
因此,经过大量研究,我发现此代码存在一些问题。 主要的问题是我需要使用“ async:false”来使AJAX调用异步。 我很难理解@Quentin链接中的解决方案。 我在下面做了一些更改,使它更清晰一些,但这是该功能的最终有效版本。
// Validate promo code, if present.
if (promo_code) {
var flag = 1;
$.ajax({
type: "POST",
url: "/ajax/validate_promo_code.php",
data: {promo_code: promo_code},
async: false,
success: function(data) {
if (data == 0) {
$('#blank_dialog_popup').html('<span class="message_text_big">Sorry, that promo code is not valid.</span>').addClass('message_warning').css('display', 'block').css('z-index', '1003');
setTimeout(returnMessageBackground, 3000);
$('#promo_code').focus();
flag = 0;
}
}
});
if (flag == 0) {
return false;
}
}
那是主要的问题,但是我的PHP代码中也有一些错误。 首先,我需要包含创建Database类的代码。 其次,我必须更有效地清理字符串输入。 第三,我的SQL查询未按预期获取包含促销代码的每一行。 最后,我不需要return语句包含任何逻辑。 这是最终版本。
require_once('../smarty/Authenticate.inc.php');
$db = new Database();
$promo_code = StringInputCleaner($_POST['promo_code']);
$check_query = "SELECT * FROM users WHERE promo_code = '$promo_code'";
$db->query($check_query);
$return = $db->num_rows;
echo $return;
function StringInputCleaner($data) {
//remove space before and after
$data = trim($data);
//remove slashes
$data = stripslashes($data);
$data = (filter_var($data, FILTER_SANITIZE_STRING));
return $data;
}
希望这对某人有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.