1

こんにちは私は現在jQueryでAJAXについて学んでいて、今はcodeigniterでそれを使おうとしています。キーアップイベントでコントローラーの関数を呼び出し、とにかく機能しているテキストボックスがありますが、コントローラー自体はテキストボックスの現在の値を取得せず、送信していないため空白のままになります。まだフォームなので、POSTデータを取得できません。送信するショットが1つしかないので、フォームを送信したくありません。この1つだけに必要なのは、イベントがすでに存在するかどうかを確認することです(検証目的で)。これが私のコードで、見やすくするためにコメントが追加されています。

意見:

<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,...}

上記のコードから、postparam'name'に値を指定します。

2、post param'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"

したがって、入力投稿を「eventname」ではなく「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 に答える