Ajax调用重定向到php文件而不是调用另一个php文件

时间:2017-09-05 15:25:58

标签: javascript php ajax

因此,在提交表单类i <- 3 do.call(grid.arrange, plist) 时,会触发对for(i in 1:2) { nam <- paste("p", i, sep = "") coln <- colnames(result[i+4]) assign( nam, ggplot(result,aes_(x=~disp,y=as.name(coln), group=~gear, color=~gear)) + geom_line() + geom_point() + scale_colour_distiller(palette = "Dark2", direction=-1, guide="legend") + scale_y_continuous(name=coln) + scale_x_continuous(name="x") ) } plist <- mget(paste0("p", 1:2)) do.call(grid.arrange, plist) .login ajax内部login.php内部login.php的调用,以致welcome.php来确保加密的密码与数据库中的密码匹配,并且输入的用户名存在于数据库中。提及我的ajax调用是否成功尝试运行也是有帮助的,但是没有重定向到我的welcome.php。所以,我对你们所有人的问题是,我是否会以正确的方式解决这个问题?

$('.login').on('submit', function(){

       // serialize the form
       var formData = $(this).serialize();
       $.ajax({
           type        : 'POST',
           url         : 'login.php',
           data        : formData,

           success: function() {
             alert("Success");
           },
            error: function(xhr) {
             alert("fail");
           }
       })
       .done(function (data) {
          
       })
       .fail(function (error) {
           console.log(data);
       });
       return false;
 });
<html>
<body>
<?php
require 'connect.php';
if((isset($_POST['user-login']) && !empty($_POST['user-login']))||
   (isset($_POST['pass-login']) && !empty($_POST['pass-login']))){

  $sth = $dbh->prepare('SELECT name FROM test_table WHERE name=?;');


  $passLogin = $_POST['pass-login'];
  $nameLogin = $_POST['user-login'];
  
  $sth->execute(Array($nameLogin));

if(password_verify($passLogin, $hashed_password) &&  $sth->rowCount() > 0) {
    header("Location:welcome.php");
    exit;
  }
}
else{
  echo 'error';
}
?>
</body>
</html>

*****************************************************************
<html>
<body>
  <?php
  echo 'welcome';
  ?>
</body>
</html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript">

<form class = "login">
      <label for="user-login">Username</label>
      <input id="user-login" name="user-login"></br>
      <label for="pass-login">Password</label>
      <input id="pass-login" name="pass-login"></br>
      <input type="submit" name= "submit" value="submit" id = "submit">
      <a id = "register-a">Register Now</a>
    </form>

3 个答案:

答案 0 :(得分:0)

您需要使用javascript重定向您的网页。 Ajax请求无法从服务器端重定向用户浏览器。我建议如果您的登录成功,请传回成功标记,以便处理您的ajax success()函数,然后使用window.location.href进行重定向。

如果您不知道,只需要抬头,您的脚本将始终返回成功。即使你echo 'error';。您需要实际形成一个失败的HTTP状态代码,以便执行错误函数,或者在代码中出现错误!

答案 1 :(得分:-1)

Ajax的目的是在不离开当前页面的情况下发出HTTP请求。浏览器似乎没有重定向,因为结果返回到Ajax处理程序,它对它们没有任何作用(您的done函数为空)。

您的目标似乎是发出HTTP请求,然后显示欢迎页面。

您不应该使用Ajax。只需使用常规表单提交。

如果提交的数据存在问题(大部分时间都没有,那么就不适合应用Ajax),然后重新显示表单。

答案 2 :(得分:-1)

这是可能的,但是你永远不会到达重定向呼叫,因为 if语句中的$hashed_password未定义。

这将抛出错误消息,但您需要使用chrome inspector&gt;等工具。网络&gt; login.php查看响应。

希望这有助于将来调试:)