1

嗨,我目前正在学习 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 部分。它充满了我认为没有必要的评论。这只是我快速查看代码的注释。:) 我的代码有问题还是我需要使用某些功能来检索数据?

4

3 回答 3

2

命名似乎有些错误,让我们跟踪一下:

1、获取输入:

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

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

从上面的代码中,您可以为帖子参数“名称”赋值。

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

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

和:

$this->test_model->check_event($this->input->post('name'));
于 2012-12-04T06:03:20.147 回答
1

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

检查你的ajax

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

所以你必须将输入帖子作为“名称”而不是“事件名称”......

要么您必须将数据的名称重命名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'));

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

于 2012-12-04T05:40:02.703 回答
0

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

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

现在我认为你会得到价值,请检查这个

于 2012-12-04T05:18:17.233 回答