Ross Wan's World!

Python, Ajax, PHP and Linux.

CodeIgniter: is_ajax,判断 AJAX 请求

Posted by Ross Wan 于 2009/02/27

CakePHP 的 RequestHandler 组件,有一个方便的方法 isAjax ,可以判断当前的请求是否为 AJAX 请求。貌似 CodeIgniter(以下简称 CI) 没有)。不过不要紧, 可以自行对 CI 的类库进行扩展,添加上 is_ajax 方法(之所以用下划线分隔的方式命名而不是骆驼峰方式,是因为要迎合 CI 的开发规范)。

我们决定扩充 CI 的CI_Input 类,不赞成直接对核心代码的修改,既然 CI 提供了良好的扩充机制,为什么不用呢? :)

创建一个名为 MY_Input.php 的文件,放在自己的 App(默认是 aplication )/libraries 文件夹下。内容如下:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Input extends CI_Input {
	function MY_Input() {
		parent::CI_Input();
	}

	function isAjax() {
        return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
    } 
}
// END Input class

/* End of file Input.php */
/* Location: ./system/application/MY_Input.php */

注意:具体的文件名,要根据你在 config.php 中对 $config[‘subclass_prefix’] 的设置。默认是 $config[‘subclass_prefix’]  = ‘MY_’;

下面,就可以在 Controller 里对 Input 类自行加载使用:

......

    function foo() {
        $this->load->library('input');
        if ($this->input->is_ajax()) {
            do_something();
            ....
        }
    }
......
Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

 
%d 博主赞过: