使用AJAX将输入值传递给控制器​​的困难

时间:2015-12-19 22:45:55

标签: javascript php jquery ajax codeigniter

我有这个PHP CodeIgniter代码,在视图中我从文本字段获取输入。使用AJAC我试图使用GET请求将此值传递给控制器​​。然后,控制器将从我的模型中调用一个函数来检索与搜索条件匹配的数据库记录。

由于某种原因,它不起作用。我试图在控制器中进行var转储以查看该值是否由AJAX传递,但我没有得到任何东西。任何想法我做错了什么以及为什么我不能在控制器中收到表格价值?

查看:

<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>

控制器

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;
}

模型

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;
}

谢谢

2 个答案:

答案 0 :(得分:1)

脚本:

<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() - 为点击事件添加引号。

     

var dataarray = controller_data.split('#'); - 分裂   data caracter必须与控制器中的implode函数中的字符匹配。

控制器:

public function getdatabasedata(){

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

    }

希望这会有所帮助。

答案 1 :(得分:0)

我将分享我在视图中使用的常用ajax代码,确保您的基本网址正确

$("#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

并且在你的控制器中只是回应一些东西

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";
}