在keyign事件的codeigniter中获取文本框的当前值

时间:2012-12-04 04:37:47

标签: php jquery ajax codeigniter

您好我正在学习jQuery中的AJAX,现在我正在尝试在codeigniter中使用它。现在发生的事情是我有一个文本框,其中在keyup事件上它将调用我的控制器上的函数并且它仍在工作但控制器本身没有获得文本框的当前值并且它仍然是空白的,因为我还没有提交形式,所以它无法获取POST数据。好吧,我不想提交表格,因为我只有一次提交,我只想要这个是检查事件是否已经存在(用于验证目的)。到目前为止,这是我的代码,添加了注释以便更好地查看。

查看:

<div>
<form>
<table border="0">
    <tr>
        <td>
            <title>Name: </title>
        </td>
        <td>
            <input id="name" type="text" name="eventname" />
        </td>
        <td>
            <div id="name1"></div>
        </td>
    </tr>
</table>

<script type="text/javascript" src="<?php echo $base; ?>javascripts/jquery-1.8.2.min.js">
     </script>
<script type="text/javascript" src="<?php echo $base; ?>javascripts/ajax.js">
     </script>

</form>
</div>

控制器:

<?php

class Login extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('test_model');
    }

    public function view()
    {
        $data['base'] = $this->config->base_url();

        //CHECK IF THE $PAGE VIEW IS EXISTING
        if ( !file_exists('test/views/pages/test_form/test_form.php'))
        {
            // IF PAGE DOESN'T EXISTS SHOW 404 ERROR
            show_404();
        }

        //FOR THE TITLE PART
        $data['title'] = ucfirst('Test'); 

        $this->load->view('templates/header', $data);
        $this->load->view('pages/test_form/test_form', $data);
        $this->load->view('templates/footer', $data);

    }

    public function message()
    {
        //this one will access database
        echo $this->test_model->check_event($this->input->post('eventname'));
        //username doesn't get the current value on keyup unlike the AJAX part
    }

}

模特:

<?php
class Test_model extends CI_Model {

    public function __construct()
    {
        $this->load->database();
    }

    public function check_event($test_input)
    {
        if($test_input==null){
            return "True";
        }
        else
            return "False";
    }

}

和AJAX:

$('#name').keyup(function() { //LISTENER FOR BUTTON CLICK BASED ON ID button ON THE PHP PAGE
    var name = $('#name').val();

    $.ajax({ //STARTS AJAX
    type: 'POST',
    url: '/CodeIgniter_2.1.3/index.php/login/message/', //THIS PAGE IS LOADED ON THE AJAX data IS THE CONTENTS ON THE PAGE NOTE COMMA SEPARATED VALUES
    data: 'name='+name,
    statusCode: { //THE STATUS FOR THE PAGE. NOTE THIS IS CASE SENSITIVE
        404: function(){ //IF 404 ERROR OCCURS THIS MESSAGE WILL BE DISPLAYED
            $('#name1').text('Page not found');
        }, //NOTE COMMA SEPARATED VALUES
        202: function(){ //IF 202 SHOW THIS TEXT
            $('#name1').text('Please wait');
        }
    }, //NOTE COMMA SEPARATED VALUES
    success: function(data){ //IF PAGE EXISTS OR FOUND THE data FROM THE GIVEN PAGE WILL BE LOADED AND PASSED
        $('#name1').html(data); //THE content ID ON THE PHP PAGE WILL CONTAIN ALL THE html data OF THE GIVEN PAGE
    }
    });
});

很抱歉这个AJAX部分。它充满了我认为不必要的评论这只是一个让我快速查看代码的说明。 :)我的代码是否有问题,或者我是否需要使用某些函数来检索数据?

3 个答案:

答案 0 :(得分:2)

关于命名似乎有些错误,让我们跟踪它:

1,获取输入:

<input id="name" type="text" name="eventname" />

var name = $('#name').val();
ajax{...
data: 'name='+name,...}

从上面的代码中,你给post param'name'值。

2,因为它给了帖子参数'name',你需要替换:

$this->test_model->check_event($this->input->post('eventname'));

<强>与

$this->test_model->check_event($this->input->post('name'));

答案 1 :(得分:1)

您将数据发布为“名称”....

检查你的ajax

data: 'name='+name,   // this is data that is posted by ajax..you are posting it with a name as "name"

所以你必须把输入帖子作为“名字”而不是“eventname”......

您必须将数据名称data: 'name='+name,重命名为data: 'eventname='+name,

替换此

echo $this->test_model->check_event($this->input->post('eventname'));

用这个

echo $this->test_model->check_event($this->input->post('name'));

在您的控制器中,它应该工作....

答案 2 :(得分:0)

文本框中没有名为value的字段,因此请修改此文本框并尝试

<input id="name" type="text" name="eventname" value="eventname"/>

现在我想你会得到价值,请查看