我希望这不是重复的;我读到的其他类似问题并没有帮助我解决问题。
我收到来自对我的PHP脚本的jQuery Ajax调用的空白响应(即data = "),用于验证用户提交的CAPTCHA值。我正在为我的CAPTCHA使用Cryptographp,它按预期工作,所以我认为这很可能是我的Ajax调用或PHP脚本中的错误。
Firebug 显示正确的 POST 值("代码"是提交的验证码值进行测试):
code a
email a@a.com
emailtext a
firstname a
lastname a
phone
调用 ajax 函数 onsubmit 来确定是否提交表单:
function validateCaptcha()
{
// Assume an invalid CAPTCHA
var valid = false;
// The form containing the CAPTCHA value
var data_string = $('form#emailform').serialize();
// Make the Ajax call
$.ajax({
url: "captcha.php",
data: data_string,
type: "POST",
async: false,
success: function (data) {
if (data == "true")
{
valid = true;
}
alert ("data: " + data);
}
});
return valid;
}
验证码.php
<?
$cryptinstall="crypt/cryptographp.fct.php";
include $cryptinstall;
// Begin the session
session_start();
//Check if CAPTCHA values match
if(chk_crypt($_POST["code"]))
return true;
else
return false;
?>
我的期望是上面的代码片段应该返回简单的"真"或"假"的响应,但也许情况并非如此。
任何帮助指出我的错误将不胜感激!
您需要使用"echo"而不是"return",并且写入为字符串。 return 用于返回函数的结果。
<?
$cryptinstall="crypt/cryptographp.fct.php";
include $cryptinstall;
// Begin the session
session_start();
//Check if CAPTCHA values match
if(chk_crypt($_POST["code"]))
echo "true";
else
echo "false;
?>
从您的captcha.php
来看,您没有回显/打印任何内容,因此它不返回任何内容。只需更换您的return true;
并用回声return false;
即可。
浏览器只有在您从脚本打印内容时才能接收某些内容。
if(chk_crypt($_POST["code"])) echo true; // 1
else echo false;// 0
或
if(chk_crypt($_POST["code"])) echo 'true'; // true
else echo 'false';// false