在PHP中使用AJAX的页面提交问题

时间:2011-11-28 04:56:49

标签: php jquery ajax codeigniter

我有一个codeigniter应用程序。这是我在视图页面中的代码。

function click_next(){

var aname = $("#txtuname").val();
var apasswd = $("#txtupass").val();
if(aname == ''){
    $("#error_val").css("display","block")
    $("#error_val").html("user name required");
    });
}else if(apasswd == ''){
    $("#error_val").css("display","block")
    $("#error_val").html("password required");
}else{ 
    var cnt=$("#alogin").serialize();
    $.ajax({  
        type: "POST",  
        url: "<?php echo base_url();?>index.php/admin/adminLogin/",
        data: cnt,
        success: function(msg){
        if(msg==1){
        window.location="<?php echo base_url();?>index.php/admin/adminHome/";
        }
        else{
        $("#error_val").css("display","block")
        $("#error_val").html(msg);
        return false;
                }
            }  
        });
}

}

此处alogin是表单的名称,url: "<?php echo base_url();?>index.php/admin/adminLogin/"是控制器页面中的函数路径。

这是Controller页面中的代码

function adminLogin(){
         $this->adminmodel->admin_login();

    }

这是模型页面中的代码

function admin_login(){
        $adminname=$this->input->post('txtuname');
        $adminpass=$this->input->post('txtupass');
        $adminp_decr=md5($adminpass);
        $this->db->where('varuname',$adminname);
        $this->db->where('varpassword',$adminp_decr);
        $query = $this->db->get('tbladmin');
        $row=$query->row();
        if($row==TRUE){
            $adminname=$row->varuname;
            $id=$row->intaid;
            $userdata = array(
                        'ausername=' =>$adminname,
                        'aid' => $id,
                        'logged_in' => TRUE
                       );

            $this->session->set_userdata($userdata);
            echo 1;
        }
        else
        {
            echo "Invalid user name or password";     
        }

    }

但是当我点击Login buttton时,什么都不会发生(click_next()被调用并给予admin,admin作为用户名,密码)。原因是什么?这在我们的服务器上工作但是在客户端的服务器上没有工作?

2 个答案:

答案 0 :(得分:1)

由于您要发布到控制器方法,我建议在该方法中获取POST变量并通过参数将它们传递给模型函数。根据MVC,控制器应该使用POST变量而不是模型。

试试这个:

function adminLogin(){
     $adminname=$this->input->post('txtuname');
     $adminpass=$this->input->post('txtupass');

     if (strlen($adminname) > 0 && strlen($adminpass) > 0)
         echo $this->adminmodel->admin_login($adminname, $adminpass);
     else
         echo "you didn't enter anything.... duh.";
    }


function admin_login($adminname="", $adminpass=""){
        $adminp_decr=md5($adminpass);
        $this->db->where('varuname',$adminname);
        $this->db->where('varpassword',$adminp_decr);
        $query = $this->db->get('tbladmin');
        $row=$query->row();
        if($row==TRUE){
            $adminname=$row->varuname;
            $id=$row->intaid;
            $userdata = array(
                        'ausername=' =>$adminname,
                        'aid' => $id,
                        'logged_in' => TRUE
                       );

            $this->session->set_userdata($userdata);
            return 1;
        }
        else
        {
            return "Invalid user name or password";     
        }

    }

这是一个小改动,但代码更多地遵循MVC原则。另外,我怀疑你的POST变量可能没有超过对模型的admin_login()方法的调用。

答案 1 :(得分:0)

您不会处理ajax调用返回“invalid username”并且无声地失败的情况。

您的if (msg == 1)至少应该有一个else条款:

if(msg==1){
           window.location="<?php echo base_url();?>index.php/admin/adminHome/";
} else {
   alert(msg);
}

并且服务器端登录功能至少应检查是否已传入用户名和密码,而不仅仅是空白。