在codeigniter中使用Ajax post调用导致内部服务器错误

时间:2017-03-29 10:01:37

标签: php ajax codeigniter

这是在谷歌浏览器上找到的错误消息:
POST http://localhost/display/register/registerUser 500(内部服务器错误)

我的项目文件名是"显示"。

一个名为&#34的寄存器文件;注册" ,它有一个名为" registerUser"的函数。所有这一切都是获取用户的输入,并将其与数据库进行比较以查看是否使用了该名称,如果有效将其存储到数据库中并为其提供成功消息,如果无效则给出错误消息。

$username=$this->input->post('name');
    $password=$this->input->post('password');

    $result=$this->user->checkExistUser($username);

    if(!$result){

        $data=array(
            'username'=>$username,
            'password'=>md5($password)
            );


    $this->user->register($data);

    echo "<script>alert('You have success registered');</script>";
    $this->load->view('home_view');
    }
    else{

        echo "<script>alert('Sorry, this email address has been used!');</script>";
        $this->load->view('registerView');
    }

这是我的名为registerView的视图文件

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to Stock game</title>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js">
</script>

</head>
<body>

<div id="container">
<h1>Welcome to Stock game!</h1>

<div id="body">
    <p>This is the register page</p>

</div>

<div>

    <form  name="userform" id="userform" >
    <input type="text" name="name" placeholder="Name"/>
    <input type="text" name="password" placeholder="Password"/>

    <button name="submit" value="submit">Register</button>
    </form>
</div>
    <script type="text/javascript">
    $(document).ready(function(){
        $('form#userform').on('submit',function(e){
            e.preventDefault();

    var name=$("#name").val();
    var password=$("#password").val();
    $.ajax({

        type:'POST',
        url:'register/registerUser',
        data:
        {'name':JSON.stringify(name),'password':JSON.stringify(password)},
        dataType:'JSON',
        success: function(response){
            if(response=="success"){
                alert("Yes login");
            }
        },
       error: function (xhr, ajaxOptions, thrownError) {
       alert(xhr.status);
       alert(xhr.responseText);
       alert(thrownError);
   }
   });
        });
    });
    </script>
    </div>
    <br/>
    </body>
    </html>

我已经使用简单的表单帖子(表单action = xxx,method = post)测试了控制器和模型类,并且没有错误。 我搜索了几乎所有有关此问题的stackoverflow问题,但我仍然无法修复它,我希望有人可以帮助我。

3 个答案:

答案 0 :(得分:1)

您无法在ajax调用中加载视图

$this->load->view('home_view'); 

以上控制器错误

将控制器更改为此代码

$username=$this->input->post('name');
$password=$this->input->post('password');

$result=$this->user->checkExistUser($username);

if(!$result){

    $data=array(
        'username'=>$username,
        'password'=>md5($password)
        );


$this->user->register($data);

echo "1";

}
else{
    echo "0";
}
在视图文件中

将您的代码更改为以下代码

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome to Stock game</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

</head>
<body>

<div id="container">
<h1>Welcome to Stock game!</h1>

<div id="body">
    <p>This is the register page</p>

</div>

<div>

    <form  name="userform" id="userform" >
    <input type="text" name="name" placeholder="Name"/>
    <input type="text" name="password" placeholder="Password"/>

    <button name="submit" value="submit">Register</button>
    </form>
</div>
    <script type="text/javascript">
    $(document).ready(function(){
        $('form#userform').on('submit',function(e){
            e.preventDefault();

    var name=$("#name").val();
    var password=$("#password").val();
    $.ajax({

        type:'POST',
        url:'<?php echo base_url()."register/registerUser"; ?>',
        data: {'name':name,'password':password},
        success: function(response){
            if(response=='0'){
                alert("Failed");
           // with the result you can redirect to the view that is in controller   
            window.href.location = '<?php echo base_url()."yoursuccesscontroller/yoursuccessfunction"; ?>';
            }
            else { 
                alert('Success');   
            //with failure
            window.href.location = '<?php echo base_url()."yourfailurecontroller/yourfailurefunction"; ?>';
            }
        }

   });
        });
    });
    </script>
    </div>
    <br/>
    </body>
    </html>

结果可以重定向到控制器中的视图

答案 1 :(得分:0)

在您的ajax中附加基本网址

url:<?php echo base_url(); ?>'register/registerUser',

答案 2 :(得分:0)

在这个问题上花了大约5个小时,我做了一个简单的步骤并发现了这个错误。我所做的是自己修改名称和密码值,所以不要在意什么是输入,只是为了测试我修改的数据是否会被发送到控制器,结果是肯定的,它存储在我的数据库。所以这个bug应该是我读取输入的方式,在我的名字标签中放入(id =&#34; name&#34; name =&#34; name&#34;之后),并做同样的事情对于密码标签,服务器不再给我500。