简体   繁体   中英

Difficulties using AJAX to pass input value to controller

I have this PHP CodeIgniter code where in the view I am getting input from a text field. Using AJAC I am trying to pass this value to the controller using GET request. The controller will then call a function from my model to retrieve a database record matching the search criteria.

For some reason it doesn't work. I tried to do a var dump in the controller to see if the value is passed by AJAX, but I am not getting anything. Any ideas what I am doing wrong and why I can't receive the form value in the controller?

View:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.13.3/jquery.min.js"</script>
<script language="Javascript">
    $(document).ready(function () {
        $('#submitbutton').click(function () {
            $.ajax({
                url: "../../index.php/testcontroller/getdatabasedata",
                data: {
                    'searchvalue' : $('#inputtext').val() 
                },
                method: 'GET'
            }).done(function (data) {
                var dataarray = data.split('##');
                $('#question').html(dataarray[ 1 ]);
                $('#answer1').html(dataarray[ 2 ]);
            });
            return false;
        });
    }); 
</script>  
</body>

Controller

public function getdatabasedata()
{
    $this->load->model('testmodel');
    $year = $this->input->get('searchvalue');
    //I TRIED TO DO A VARDUMP($YEAR) BUT I DON'T GET ANYTHING!

    $movie = $this->testmodel->findquestion($year);
    $moviesstring = implode(",", $movie);
    echo $moviesstring;
}

Model

function findquestion($searchvalue)
{
    $this->db->where('answer1', $searchvalue);
    $res = $this->db->get('questions');
    var_dump($res)
    if ($res->num_rows() == 0)
    {
        return "...";
    }
    $moviearray = $res->row_array();
    return $moviearray;
}

Script:

<script 
  src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<script language="Javascript">
$(document).ready(function ()
{
  $("#submitbutton").bind("click",function() 
    { 
      var target_url = '<?php echo(base_url()."testcontroller/getdatabasedata") ; ?>';
      var data = {'searchvalue' : $('#inputtext').val() }; 
      $.ajax ({

              url : target_url, 
              type: 'GET', 
              data: data, 
              cache: false, 
              success: function(controller_data)
                { 
                  var dataarray = controller_data.split('#'); 
                  $('#question').html(dataarray[1]); 
                  $('#answer1').html(dataarray[3]); 
                }, 
            }); 
            return false; 
    }); 
});
</script>

.bind("click",function() - add quotes to click event.

var dataarray = controller_data.split('#'); - split data caracter must match character in implode function in controller.

Controller:

public function getdatabasedata(){

        $this->load->model('testmodel');
        $year = $this->input->get('searchvalue');
        $movie = $this->testmodel->findquestion($year); 
        $separated = implode("#", $movie);
        echo $separated;

    }

Hope this helped.

I will share my usual ajax code that I use in my views , make sure your base url is correct

$("#submitbutton").bind("click",function()
        {

            var target_url = '<?php echo(base_url()."testcontroller/getdatabasedata") ; ?>';
            $.ajax
            (
            {
                url : target_url,
                type: "GET",
                // data: {'searchvalue' : $('#inputtext').val()},
                cache: false,
                success: function(data)
                {
                    alert(data);
                },
                error: function(jqXHR, textStatus, errorThrown)
                {
                    alert("error during loading ....");
                }
            });

        });// end loading via ajax

and in your controller just echo something

public function getdatabasedata()
{
    //$this->load->model('testmodel');
    //$year = $this->input->get('searchvalue');
    //I TRIED TO DO A VARDUMP($YEAR) BUT I DON'T GET ANYTHING!

    //$movie = $this->testmodel->findquestion($year);
    //$moviesstring = implode(",", $movie);
    //echo $moviesstring;
    echo "hello";
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM