Javascript Can';我不能让Ajax以我想要的方式与PHP一起工作

Javascript Can';我不能让Ajax以我想要的方式与PHP一起工作,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我在同一个页面上有一个登录和注册表单,我用jQuery隐藏了它,因此一次只有一个表单处于活动状态。当我激活注册表时,用一封与我的PHP if语句不匹配的电子邮件填写电子邮件字段,然后按submit,然后页面刷新并激活登录表单 我想要页面做的是运行PHP脚本,当PHP if语句失败时,它将阻止页面刷新,然后打印PHP else语句中的消息 代码如下所示: PHP: jQuery: $(document).ready(function () { var request = $(this).se

我在同一个页面上有一个登录和注册表单,我用jQuery隐藏了它,因此一次只有一个表单处于活动状态。当我激活注册表时,用一封与我的PHP if语句不匹配的电子邮件填写电子邮件字段,然后按submit,然后页面刷新并激活登录表单

我想要页面做的是运行PHP脚本,当PHP if语句失败时,它将阻止页面刷新,然后打印PHP else语句中的消息

代码如下所示:

PHP:

jQuery:

  $(document).ready(function () {

var request = $(this).serialize();
$("#registerform").on('submit', function (event) {
    event.preventDefault();

     $.ajax({
     type: 'POST',
     url: 'registration.php',
     data: request,
     success: function(){
       $(this).submit();
       console.log("test");
     },
     error: function () {
        event.preventDefault();
     alert("fail");
     }
     });

   });
});

我假设您的代码运行正常,并且您通过javascript中的post正确接收数据,那么只需进行这些更改

 if ($count==0) {
        if (preg_match('/^[a-z]{6}+[0-9]{2}+@student.westerdals.no+$/i', $email)) {
            $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')";
            $result = $DBcon->query($query);

     if ($result){
         header("Location: home.php");
      }
     else{ 
          die("Some error");
     }
            die();
        } else {
          die("You must provide a valid student email!");
        }
    } else{
        die("Email already taken!");
    }

Put
var request=$(this).serialize()编码到提交函数中。我已经尝试过了,但是我得到了一个错误:“未定义的索引:中的请求…”引用了我的PHP中的“$request=$\u POST['request'];”。当我运行“print_r($_POST);”时,请求的值实际上正在被打印。现在我不断得到“Undefined index:request in…”在PHP中指的是我的“$request=$_POST['request'];”。当我运行“print_r($_POST);”时,请求的值实际上正在打印。请检查是否已将表单中的关键字名称用作“request”。只有当您没有$_POST[variable]的值时,才会显示此错误;所以,检查可变部分。还要检查它是否正确地传递给php。当我将要序列化的对象从“this”更改为实际的表单id“#registerform”时,它部分工作正常,不会从php中的else语句打印(“您必须提供有效的学生电子邮件”)。但是,在Ajax的错误部分,我得到了警报,但没有得到预防默认值。有什么建议吗?如果效果很好,那就去做吧。因为没有问题。或者创建一个显示错误的新php页面。然后使用重定向显示错误。或者简单地使用显示/隐藏方式来显示错误。隐藏您的错误消息

。然后在ajax中,如果错误持续存在,则显示它。或者只是在ajax中用html打印错误。
 if ($count==0) {
        if (preg_match('/^[a-z]{6}+[0-9]{2}+@student.westerdals.no+$/i', $email)) {
            $query = "INSERT INTO members(email, password) VALUES('$email', '$hashed_password')";
            $result = $DBcon->query($query);

     if ($result){
         header("Location: home.php");
      }
     else{ 
          die("Some error");
     }
            die();
        } else {
          die("You must provide a valid student email!");
        }
    } else{
        die("Email already taken!");
    }