10

我一直在寻找一个完整的工作示例,了解如何将 AJAX 与 Codeigniter 一起使用(我是 AJAX 新手)。我见过的帖子/ tuts 都是旧的——所有的编程语言都在发展。

我想在页面上有一个输入表单,它可以向页面返回一些内容(例如变量、数据库查询结果或 html 格式的字符串),而无需刷新页面。在这个简单的示例中,是一个带有输入字段的页面,它将用户输入插入到数据库中。提交输入后,我想加载不同的视图。如果我能理解如何做到这一点,我就能适应它来做我需要的任何事情(希望它也能帮助其他人!)

我的“测试”控制器中有这个:

function add(){
    $name = $this->input->post('name');
    if( $name ) {
        $this->test_model->put( $name );
    }
}

function ajax() {
    $this->view_data["page_title"] = "Ajax Test";
    $this->view_data["page_heading"] = "Ajax Test";

    $data['names'] = $this->test_model->get(); //gets a list of names
    if ( $this->input->is_ajax_request() ) { 
        $this->load->view('test/names_list', $data);
    } else {
        $this->load->view('test/default', $data);
    }
}

这是我的视图,名为“ajax”(所以我通过 URL www.mysite.com/test/ajax 访问它)

<script type="text/javascript">
    jQuery( document ).ready( function() {
       jQuery('#submit').click( function( e ) {
           e.preventDefault();
           var msg = jQuery('#name').val();
           jQuery.post("
               <?php echo base_url(); ?>
               test/add", {name: msg}, function( r ) {
                   console.log(r);
               });
           });
       });
</script>

<?php echo form_open("test/add"); ?>
<input type="text" name="name" id="name">
<input type="submit" value="submit" name="submit" id="submit">
<?php echo form_close(); ?>

目前发生的所有事情是我输入一个输入,更新数据库并显示视图“test/default”(它不会刷新页面,但不会根据需要显示“test/names_list”。非常感谢提前求任何帮助,让我摆脱痛苦!

4

1 回答 1

9

为表单设置唯一 ID:

echo form_open('test/add', array('id'=>'testajax'));

我假设您想用视图替换表单:

jQuery(document).ready(function(){
var $=jQuery;
$('#testajax').submit(function(e){
    var $this=$(this);
    var msg = $this.find('#name').val();
    $.post($this.attr('action'), {name: msg}, function(data) {
      $this.replace($(data));
    });
    return false;
});

如果您在 json 响应中返回视图的 url,则更好的方法:

$.post("<?php echo base_url(); ?>test/add", {name: msg}, function(data) {
  $this.load(data.url);
},"json");


从您上一条评论来看 - 我强烈不建议更换正文,支持这样的代码将非常困难。

但这里是分析器:

$.post("<?php echo base_url(); ?>test/add", {name: msg}, function(data) {
      $('body').replace(data);
    });
于 2012-12-15T00:13:18.803 回答