【问题标题】:window.location.href don't work with AJAXwindow.location.href 不适用于 AJAX
【发布时间】:2016-08-24 19:52:27
【问题描述】:

由于某种原因,“window.location.href”功能对我不起作用,似乎无法找出原因。 这是 index.php 中的代码:

<div class="dropdown-menu">
    <div style="width: 300px;">
        <div class="panel panel-primary">
            <div class="panel-heading">Login</div>
            <div class="panel-heading">
                <label for="email">Email</label>
                <input class="form-control" id="email"  name="email" required />
                <label for="password">Password</label>
                <input type="password" class="form-control" id="password"  name="password" required />
                <p><br/></p>
                <a href="#">Forgotten Password</a><input type="button" class="btn btn-success" name="login" id="login" value="Login">
            </div>
        </div>
        <div class="panel-footer"></div>
    </div>
</div>

这就是jQuery函数中提到的“action.php”文件中的函数:

<?php
if(isset($_POST["userLogin"])){
    $email = mysqli_real_escape_string($con, $_POST["userEmail"]);
    $password = md5($_POST["userPassword"]);
    $sql = "SELECT * FROM user_info WHERE email = '$email' AND password = '$password'";
    $run_query = mysqli_query($con, $sql);

    if($run_query===false){
        echo mysqli_error($con);
    } else {
        $row = mysqli_fetch_array($run_query);
        $_SESSION["uid"]= $row["user_id"];
        $_SESSION["name"]= $row["first_name"];
        echo "welcome";
    }
}
?>

这是带有 AJAX 功能的 jQuery:

$(document).ready(function(){
    $("#login").click(function(event){
        event.preventDefault();
        var email =  $("#email").val();
        var pass = $("#password").val();
        
        $.ajax({
            url : "action.php",
            method : "POST",
            data : {userLogin: 1, userEmail:email, userPassword:pass},
            success : function(data){
                if(data == "welcome"){
                    window.location.href = "profile.php";
                }
               /* alert(data);*/
            }
        });
    });
});

注意事项: 正如您在 jQuery 函数中看到的那样,有:“alert(data);”。我想看看它是否有效,并在没有“window.location.href”功能的情况下将其放在屏幕上,以查看“if”语句是否正确,并且它确实有效。此外,当我直接转到 profile.php 文件时,我看到用户已登录,这对我来说意味着 SQL 函数工作正常,只是它不会将我重定向到那个(profile.php)页面。

【问题讨论】:

  • @CharlotteDunois 不,你没有。如果你现在做window.location.href = "/subdir",你会被带到http://stackoverflow.com/subdir
  • 我认为他缺少正斜杠是导致错误的原因。
  • 您未能测试您的 if 语句是否有效。
  • 在来到这里并发布一个标题为“window.location.href is not working”的问题之前,您应该已经将该行直接粘贴到您的控制台中,从而证明它实际上是有效的.然后你回到绘图板上,找出实际不起作用的地方。
  • if(data == "welcome") 很可能是错误的,因为您(可能)无意中在 php 文件中打印了一些空白。在检查 == "welcome" 之前尝试修剪 ajax 结果:if($.trim(data) == "welcome")

标签: javascript php jquery html ajax


【解决方案1】:

window.location.href 需要一个绝对 url 或一个相对于您的域的 url(如果它以 / 开头)。

如果只想更改当前路径的文件部分,可以使用window.location.assign("profile.php")

【讨论】:

  • 这不是只有在发送到不同的主机时才需要吗?
  • 没有。您不需要绝对路径。您确实需要一个相对的起始/,但仅此而已。
  • 这取决于。当我使用www.example.com/foo/bar 并使用window.location.href = "/baz" 时,我将被重定向到www.example.com/baz。如果我想去www.example.com/foo/bar 我会使用window.location.href = "/foo/bazwindow.location.assign("baz")
  • 是的,和域名有关。
【解决方案2】:

如果你想在同一个域内重定向

window.location.href = "/profile.php";

如果你想重定向到另一个域

window.location.href = "http://www.antotherdomainname.com/profile.php";

【讨论】:

  • 没有。您不需要完整的 URL。我们可以停下来吗?
  • 是的,抱歉,如果您在域内进行重定向,则无需输入完整的 url。但是,如果您要重定向到另一个域(网站),则必须输入完整的 url。我说的对吗?
  • @BiswajitPanday 对,但这显然不是这里发生的事情。
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2015-07-04
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多