【问题标题】:Page Submission Issue Using AJAX In PHP在 PHP 中使用 AJAX 的页面提交问题
【发布时间】:2011-11-28 04:56:48
【问题描述】:

我有一个 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: "&lt;?php echo base_url();?&gt;index.php/admin/adminLogin/"是控制器页面中的函数路径。

这是控制器页面中的代码

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";     
        }

    }

但是当我单击登录按钮时,什么都不会发生(调用 click_next() 并将 admin、admin 作为用户名、密码)。这是什么原因?这在我们的服务器上工作但在客户端的服务器上不工作?

【问题讨论】:

  • 当我使用firebug时,红色的url路径。有帖子txtuname admin txtupass admin Source txtuname=admin&txtupass=admin 。但是没有回应

标签: php jquery ajax codeigniter


【解决方案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() 方法的调用。

【讨论】:

  • 不会发生任何事情。这在我们的服务器中有效,但在客户端的服务器中无效
  • 我注意到您将 $base_url 与 index.php 一起使用。您应该将其更改为 $site_url 并取出 index.php。我不确定你是否使用 mod_rewrite 去除 index.php 但 $site_url 更便携。
【解决方案2】:

您不会处理 ajax 调用返回“无效用户名”而只是静默失败的情况。

你的if (msg == 1) 至少应该有一个else 子句:

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

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

【讨论】:

  • 好的,现在它的工作是config.php页面中base_url的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多