Codeigniter使用ajax产生内部服务器错误

时间:2014-03-01 22:08:29

标签: ajax codeigniter codeigniter-2

由于这个问题,我停止了我的codeigneiter应用程序。我正在使用ajax(jquery)作为用户注册脚本,但是当连接到控制器时我收到错误500内部服务器错误,我读到问题与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" ; 
   }
  }
 }

我真的需要帮助才能继续使用此应用。非常感谢。

1 个答案:

答案 0 :(得分:0)

  1. 你的ajax网址是否正确? (base_url + controller之间没有丢失斜杠?)
  2. 您是否加载了form_validation? $this->load->library('form_validation');和网址助手? (对于site_url)
  3. (可选:您不需要在if中检查true,只需执行if($this->users->register($username,$email,$password))
  4. 编辑

    1. 您的控制器文件是否为auth.php? (Controller中没有其他具有相同名称的文件,也没有同名的其他控制器?)
    2. 使用手动调试。将所有内容放在函数的注释中,看看它是否仍然出现500错误,在这种情况下,可能是.htaccess问题或ajax问题(请参阅Firebug)?如果有效,请在发现问题之前取消注释。
    3. 编辑2

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