在CodeIgniter中从JSON调用特定控制器

时间:2013-02-05 16:49:06

标签: jquery json codeigniter

有我的代码:

var formObject = {
    run : function(obj) {
        if (obj.val() === '') {
            obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
        } 
        else
       {
            var id = obj.attr('id');
            var v = obj.val();
            jQuery.getJSON('update.php', { id : id, value : v }, function(data) {
                if (!data.error) {
                    obj.next('.update').html(data.list).removeAttr('disabled');
                } else
                {
                    obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
                }
            });
        }
    }
};
$(function() {
    $('.update').on("change", function() {
        formObject.run($(this));
    });
});

我需要调用特定的控制器才能自动填充选择表单。 在这行代码中,我调用了一个url:

jQuery.getJSON('update.php', { id : id, value : v }, function(data)

我可以调用一个codeigniter视图来代替这个'update.php'文件,或者我必须以其他方式执行它吗?感谢。

1 个答案:

答案 0 :(得分:0)

class Controller{       
    public function mymethod(){     
        //make sure its an ajax request
        if(!$this->input->is_ajax_request())
        {
            show_error('Invalid Request');
            return;
        }           
        if(!$this->input->post('id') OR !$this->input->post('val'))
        {
            echo(json_encode(array(
                'error'  : 1
            )));
            return;
        }
        $query_from_db = ''; //mysql query ?            
        if( $query_from_db )
        {
            //send to browser, no view
            return $this->output
                        ->set_content_type('application/json')
                        ->set_output(json_encode($query_from_db));
        }           
    }
}

/**
 * Put this global var in your main view 
 * So its avail to all your files
**/
var SITE = "<?=site_url()?>";

/** Somefile.js **/
;(function($){

    var formObject = {
        init : function(){
            if($("#formID")) this.run();//only load if a form with specific id exists
        },
        run : function(){
            //limited nested functions
            //only execution
            var update = function(obj){
                //check for empty value
                if(obj.val() == '')
                {
                    obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
                    return;
                }

                var data  = {
                    id  : obj.attr('id'),
                    val : obj.val()
                };

                return doAjax(data); //doAjax function execution
            };

            var doAjax = function(data){
                return $.getJSON( SITE + "controller/mymethod", data, function(callback){
                    if(callback.error)
                    {
                        obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
                        return;
                    }

                    obj.next('.update').html(callback.list).removeAttr('disabled');

                });
            };

            $('.update').on("change", function() {
                update($(this));//update function execution
            });
        }
    }               
    $(function(){
        formObject.init();
    });
})(jQuery);