【问题标题】:Use Ajax post call in codeigniter cause Internal Server Error在 codeigniter 中使用 Ajax 后调用导致内部服务器错误
【发布时间】:2017-03-29 10:01:36
【问题描述】:

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

我的项目文件名为“display”。

一个名为“register”的控制器文件,它有一个名为“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>

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

【问题讨论】:

  • 你为什么JSON.stringify你的意见?
  • @hassan 我看到一些帖子这样做是为了解决这个问题,所以我只是尝试使用 JSON.stringify,但是它不起作用
  • 当您将数据属性设置为{'name':name,'password':password} 时,您遇到了同样的错误?
  • @hassan 是的,同样的错误
  • 发布您的回复,这会导致控制台出现 500 内部错误。

标签: php ajax codeigniter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您不能在 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>
    

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

    【讨论】:

    • 谢谢,昨天修复了这个bug之后,我又发现了另一个视图不能工作的bug,所以我做了一些研究,并修复了它。
    【解决方案3】:

    在你的 ajax 中添加基本 url

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

    【讨论】:

    • 你好,我之前试过,只是又做了一次,它显示同样的错误。我可以通过在浏览器中输入链接来访问注册/注册用户。出于某种原因,它只是不适用于 ajax post/get。
    • 请检查Mozilla firebug中的ajax请求
    • 给我错误详情,如下所示,我还检查了我的本地服务器日志,它只是说有一个 500。jquery.min.js:4 POST localhost/display/register/registerUser 500(内部服务器错误)发送@ jquery.min.js:4 ajax@jquery.min.js:4(匿名)@(index):42 dispatch@jquery.min.js:3 q.handle@jquery.min.js:3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    相关资源
    最近更新 更多