【问题标题】:Codeigneiter produce an internal server error with ajaxCodeigniter 使用 ajax 产生内部服务器错误
【发布时间】:2014-03-01 22:08:29
【问题描述】:

因为这个问题,我停止了我的 codeigneiter 应用程序的工作。我正在使用 ajax (jquery) 作为用户注册脚本,但连接到控制器时出现错误 500 Internal server error,我读到问题与 CSRF 有关,但即使我关闭了 CSRF,问题仍然存在配置文件。

我的ajax代码是:

$(document).ready(function(){
 var controller = 'Auth';
 var base_url   = '<?php echo site_url(); ?>';

  // User Registration
 $('#subm').click(function() 
 {  
     var username      = $("#username").val();
     var email         = $("#email").val();
     var password      = $("#password").val();
     var dataString    = $('#registerForm').serialize(); 


    if(username.length < 6 || username.length > 20)
     {
       $('#loader').hide();
       $('#errormsg').html("username length must be between 6 and 20 characters .") ; 
       $('.error-register').show(); 

     }

     // If everything is OK 
     else
     {
        $.ajax({
           type: "POST",
           url: base_url + controller + "/register",
           data: dataString,
           cache: false,
           success: function(message)
           {      
              $('#loader').hide();
              if(message == true)
              {
                 $("#successModal").modal();
                 $('.notify').html("You have successfully Registered , Please Confirm Your Email !");
                 $("#username,#email,#password").val('');
              } 
              else 
              {
                  $('#errormsg').html(message) ; 
                  $('.error-register').show(); 

              }

           }
        });
      }

     return false;

 //End click 
 });

//End ready 
});

Auth 控制器代码是:

   <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

   class Auth extends CI_Controller 
   {
public function register()
{

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

      $this->form_validation->set_rules('username', '"username"',
     'trim|required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean');
      $this->form_validation->set_rules('email', '"email"',
     'trim|required|min_length[5]|max_length[52]|encode_php_tags|xss_clean');
      $this->form_validation->set_rules('password', '"password"',
      'required|min_length[5]|max_length[52]|alpha_dash|encode_php_tags|xss_clean');

 if($this->form_validation->run())
     {    
       $this->load->model('users');
     if($this->users->register($username,$email,$password) === true)
     {           
         return true ; 
     }
     else
     {
        echo "Username or email already token" ; 
     }

   }
   else
   {
       echo  "please verify your inputs" ; 
   }
  }
 }

我真的需要帮助才能继续使用这个应用程序。非常感谢。

【问题讨论】:

  • 如果您直接在浏览器中访问 ajax url (yoursite.com/auth/register) 会发生什么?
  • 它显示:请验证您的输入(控制器中的消息)

标签: ajax codeigniter codeigniter-2


【解决方案1】:
  1. 你的 ajax url 正确吗? (base_url + 控制器之间没有缺少斜线?)
  2. 您是否加载了 form_validation ? $this-&gt;load-&gt;library('form_validation'); 和 url 助手? (对于 site_url)
  3. (可选:您不需要在 if 中检查 true,只需执行 if($this-&gt;users-&gt;register($username,$email,$password))

编辑

  1. 您的控制器文件是否名为 auth.php ? (控制器中没有其他同名文件,也没有其他同名控制器?)
  2. 使用手动调试。将所有内容放入函数的 cmets 中,看看它是否仍然出现 500 错误,在这种情况下,可能是 .htaccess 问题或 ajax 问题(参见 Firebug)?如果可行,请取消注释,直到找到问题为止。

编辑 2

  1. 我相信这是一个 AJAX/.htaccess 问题。您可以使用 Firebug(如果您使用的是 Firefox)或 Chrome 的控制台查看发送的 http 请求吗?
  2. 你能在这个控制器中创建一个其他函数,看看它是否有效吗?
  3. 检查您是否没有任何挂钩或路由(在您的配置/路由/挂钩文件中)执行一些禁用此控制器的逻辑。如果一切都设置为默认值,那应该不是问题。
  4. 最后,我敢打赌,您将true 置于 CSRF 保护中(在您的配置文件中)。它不能很好地与 CodeIgniter 中的 AJAX 一起使用,因此请禁用配置文件中的 CSRF 值。它应该再次工作。 (还有其他方法可以防止 CSRF)

【讨论】:

  • 感谢您的回答,autoload.php文件中已经加载了form_validation库,我检查了ajax URL;没有漏掉斜线,我还是不知道这个问题的根源。
  • auth.php 在整个应用程序中是独一无二的。我将所有内容都放在函数内的注释中,但 500 错误仍然存​​在。我很抱歉我的问题@BabyAzerty
  • 再次编辑了我的答案。我的编辑的简短版本:$config['csrf_protection'] = FALSE;
  • 非常感谢,我在 auth 控制器中创建了一个新函数,它在使用 ajax 时只需返回一条消息,效果很好,chrome 的控制台显示 xhr 的 200 成功代码。我认为问题与注册函数本身有关。
  • 没问题!如果我的回答确实有帮助,请不要犹豫验证它;)
猜你喜欢
  • 2015-02-07
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多