从 jQuery Ajax 调用到 PHP 脚本的空白响应


Blank response from jQuery Ajax call to PHP script

我希望这不是重复的;我读到的其他类似问题并没有帮助我解决问题。

我收到来自对我的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