【问题标题】:jQuery AJAX don't runs well on my PHP MVCjQuery AJAX 在我的 PHP MVC 上运行不佳
【发布时间】:2012-08-11 09:41:24
【问题描述】:

我制作了一个简单的 PHP MVC 框架,用于我的 Web 应用程序。但是,当尝试 AJAX 请求(使用 jQuery)时,它的行为不符合预期。以下是相关的代码片段:

查看

<input type="text" name="email" id="email">
<input type="password" name="password" id="password">
<a id="btnlogin">Login</a>

Jquery(放在单独的文件中)

$("#btnlogin").click(function(){
    var email = $("#email").val();
    var password = $("#password").val();

    $.ajax({
        type:"POST",
        url:"user/login",
        data:{email : email, password : password},
        cache:false,
        success:function(){
            alert("suksesssssss");
        }
    });

控制器名称:用户

public function login()
{
    $email = $_POST['email'];
    $password = $_POST['password'];
    $this->model->login($email,$password);
}

模型名称:用户模型

public function login($email,$password)
{
    $sth = $this->db->prepare("select * from tbl_user where email = :email and password = :password");
    $sth->execute(array(
        ':email' => $email,
        ':password' => Hash::create('sha256', $password, PASSWORD_HASH_KEY)
    ));
    $count = $sth->rowCount();

    if($count > 0)
    {
        $data = $sth->fetch();

        Session::init();
        Session::set('id', $data['id']);
        Session::set('fullName', $data['nama_lengkap']);


        $this->updateLastLogin($data['id']);
        $this->updateLoginCount($data['id']);

        header('location:' . URL . 'user/profile');
    }
    else
    {
        header('location:' . URL . 'home/alogin');
    }
}

我的目标是在登录成功后重定向到个人资料页面。但功能:

header('location:' . URL . 'user/profile');

这不运行..

是什么导致了这种行为?如果我使用 jQuery 重定向到另一个页面会更好吗?

【问题讨论】:

    标签: php jquery ajax model-view-controller


    【解决方案1】:

    在执行 AJAX 时,您不能使用后端脚本重定向某人。您需要在 $.ajax() 成功回调中返回要重定向到的 url(或通过您的 js 确定)。

    所以:

      header('location:' . URL . 'user/profile');
    }
    else
    {
      header('location:' . URL . 'home/alogin');
    }
    

    应该是:

      echo json_encode( array( 'redirect' => 'location:' . URL . 'user/profile' ) );
    }
    else
    {
      echo json_encode( array( 'redirect' => 'location:' . URL . 'home/alogin' ) );
    }
    

    然后,在成功回调中使用 data 参数:

    $.ajax({
      //...
      success: function(data){
        if( data.redirect ){
          window.location = data.redirect;
        }
      }
    });
    

    【讨论】:

      【解决方案2】:

      在使用 ajax 时,通常使用回调函数。您没有被重定向的原因很可能是您收到的 ajax 调用的答案永远不会作为重定向处理。

      你应该做什么而不是重定向到

      header('location:' . URL . 'user/profile');
      

      简单地说,使用javascript回调函数返回url并重定向:

      $.ajax(
      {
      type:"POST",
      url:"user/login",
      data:{email : email, password : password},
      cache:false,
      success:function(data)
      {
        window.location = data
      }
      })
      

      如果仍然失败,请安装 firebug 或 chrome。按 Inspect 元素调出 Web 开发控制台 按 Net 或 network 选项卡。然后按登录按钮,如果你得到一个成功的http请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        相关资源
        最近更新 更多