Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CodeIgniter + jQuery UI autocomplete = 500 internal server error (with code) due to CSRF set to TRUE

Here is the view code:

<html>
<head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>

        <!-- Load JQuery UI -->
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script type="text/javascript">
    $( function() {    

        $("#input").autocomplete({
            source: function(req, add){
                $.ajax({
                    url: '<?php echo base_url(); ?>test/ac2',
                    dataType: 'json',
                    type: 'POST',
                    //data: req,
                    data: 'input='+req,
                    success: function(data){
                        if(data.response =='true'){
                           add(data.message);
                        }
                    }
                });
        },
        minLength: 2,
        select: function(event, ui){
            $(this).end().val(ui.item.value);
            }
        });

     });      
</script>
</head>
<?php

echo form_open();
echo form_input('input', '', 'id="input"');
echo form_close();

?>
</html>

and the controller code:

class Test extends CI_Controller {

    function index()
    {
        $this->load->view('vw/test_vw');
    }

    public function ac2()
    {

        //$search = $this->input->post('term');
              $search = $this->input->post('input');

        $data['response'] = 'false';

        $this->db->select('*');
        $this->db->from('loc_exercise');
        $this->db->like('locations', $search);
        $locations = $this->db->get()->result();


        if (count($locations) > 0) {
            $data['message'] = array();

            foreach ($locations as $location) {
                $data['message'][] = array(  'label' => $location->locations,
                'item'  => $location->locations,
                'value' => $location->locations );
            }

            $data['response'] = 'true';
        }
        echo json_encode($data);
    }

When I type anything in into the input box I get this on the console:

POST http://my.example.com/test/ac2 500 (Internal Server Error)

and on CI error logs there seems to be no issues (log_threshold is 1, /logs is chmod 777).

BTW I have my config.php with query_strings TRUE and allow_get_array TRUE.

Any ideas how to fix this issue?

like image 448
pepe Avatar asked Feb 24 '23 18:02

pepe


1 Answers

This is almost certainly a CSRF token issue.

See this in the CI forums and this blog post

like image 115
coolgeek Avatar answered Apr 28 '23 10:04

coolgeek