【问题标题】:How to redirect after successful php if statement in ajax?ajax中的php if语句成功后如何重定向?
【发布时间】:2020-07-18 12:19:33
【问题描述】:

PHP 正如您在下面的 PHP 代码中看到的那样,我正在尝试重定向用户,但我在 jquery 中努力做到这一点。我想要的是如果登录语句成功 login_success 那么用户将重定向到 myprofile.php 但什么也没发生。

    if($query)
          {
             $num=mysqli_fetch_array($query); //fetching all matching records

                if($num > 0) 
                {
                  //if record found
                    $_SESSION["loggedin"] = TRUE;
                    $_SESSION['cid']=$num['cid'];

                    echo  "login_success";

                }
                else
                {
                    echo "invalid email or password.";
                }

           }else
           {
             echo "something went wrong!";
           }

阿贾克斯:

$.ajax({  
                       url:"sql/login_process.php",  
                       method:"POST",  
                       data:$('#login_form').serialize(),  
                       beforeSend:function(){  
                            $('#login_response').html('<span class="text-info"><i class="fas fa-spinner"></i> Loading response...</span>');  
                       },  
                       success:function(data){  
                            $('form').trigger("reset");  
                            $('#login_response').fadeIn().html(data);  
                            setTimeout(function(){  
                                 $('#login_response').fadeOut("slow");  
                            }, 7000);

                            if(data == "login_success") location.href = "http://www.example.com/myprofile.php";
                       }  
                  }); 

我觉得我在这里遗漏了一些东西。

if(data == "login_success") location.href = "http://www.example.com/myprofile.php";

【问题讨论】:

  • 请先制作console.log(data)看看先返回什么数据。
  • 回显什么?
  • 它的 echo login_success 到 #login_response 但我想将用户重定向到 myprofile.php
  • 尝试删除空格data.trim() == "login_success"。我强烈建议您更改逻辑以使用序列化格式,例如 XML 或 JSON,因为返回纯字符串太容易被格式化破坏
  • 您确定您的 JavaScript 控制台中没有出现任何错误吗?

标签: php jquery session redirect


【解决方案1】:

*更新 像下面提到的@Patrick Q 那样回显数据似乎没有什么不好。 您能否尝试修剪在 javascript/jquery 中收到的数据以检查意外的空格

data.trim()

如果您想添加更多变量,您可以执行以下解决方案。 (或者如果你喜欢它)

您不应该回显 ajax 的结果。相反,您应该将其返回为 json

PHP 文件:

$ajax_result = array():
$ajax_result['success'] = false;
$ajax_result['message'] = 'Incorrect login data';

if(something)
{
    $ajax_result['success'] = 'login_success';
    $ajax_result['message'] = 'You were logged in. You will be redirected now.';
}

header('Content-type:application/json;charset=utf-8');
echo json_encode($ajax_result);

这会将结果作为数组返回到前​​端,您可以通过选择带有 data.success 或 data.message 等的变量来操作它。

jQuery/Javascript:

     $.ajax({  
       url:"sql/login_process.php",  
       method:"POST",  
       data:$('#login_form').serialize(),  
       beforeSend:function(){  
            $('#login_response').html('<span class="text-info"><i class="fas fa-spinner"></i> Loading response...</span>');  
       },  
       success:function(data){  
            $('form').trigger("reset");  
            $('#login_response').fadeIn().html(data.message);  
            setTimeout(function(){  
                 $('#login_response').fadeOut("slow");  
            }, 7000);

            if(data.success == "login_success") location.href = "http://www.example.com/myprofile.php";
       }  
  }); 

这是最基本的用途。您可以修改它以保护只能从 ajax 查询等访问。

【讨论】:

  • 使用纯文本响应并没有错,因为您只会使用单个文本字符串。它不像 JSON 那样灵活,但它本身也没有问题。
  • 您忘记设置 Content-Type 标头。 PHP 将声称它正在发送 HTML。
  • 感谢您的反馈,伙计们。我很感激。
  • 谢谢你们帮助我。
【解决方案2】:

感谢以上所有答案和 cmets。老实说,我喜欢 Patrick Q Idea,这就是我到目前为止所取得的成就。

Ajax

  success:function(data){  
      if(data != null && data == "success"){ //redirect...
               window.location = "http://google.com";
    } else { //report failure...

                   $('form').trigger("reset"); 
                   $('#login_response').fadeIn().html(data);
                   setTimeout(function(){  
                   $('#login_response').fadeOut("slow");  
                   }, 7000);
              }
    }  

PHP

          if($num > 0) 
            {
              //if record found
                $_SESSION["loggedin"] = TRUE;
                $_SESSION['cid']=$num['cid'];

                echo "success";

            }

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多