CodeIgniter Ajax Layer


CodeIgniter Ajax Layer

我对ajax做了很多研究,但似乎找不到太多关于使用codeigniter创建单独的ajax层的信息。。。我在代码点火器上执行教程视频的目录树中看到过ajax控制器,但从未得到真正的解释。我假设它是为了促进封装,并且只向启用了javascript之类的用户显示,只是不知道如何在控制器中实现它,以便在我自己的项目中使用。

这一切都取决于你在做什么。在我看来,最简单的方法不是使用单独的AJAX控制器和url,而是在控制器中检测请求并输出与正常情况不同的内容。Input类有一个功能:

/**
 * Is ajax Request?
 *
 * Test to see if a request contains the HTTP_X_REQUESTED_WITH header
 *
 * @return  boolean
 */
public function is_ajax_request()
{
    return ($this->server('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest');
}

我更喜欢使用常数:

/**
 * Is this an ajax request?
 *
 * @return      bool
 */
define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest');

控制器方法中的示例用法:

$data = $this->some_model->get();
if ($this->input->is_ajax_request())
{
    // AJAX request stops here
    exit(json_encode($data));
}
$this->load->view('my_view', $data);

这样,您就不会有相同或相似的应用程序逻辑分布在几个不同的控制器中,并且您的代码可以更易于维护。例如,您的标准HTML表单可以使用AJAX发布到相同的位置,并具有不同的输出,因此它也有助于使渐进增强更容易、更干净。此外,您将不会有需要对用户"隐藏"的"仅AJAX"URL。

我将尝试提供一个我过去使用过的简单解决方案。然而,我不确定您是否熟悉CodeIgniter,而且这是我自己开发的"自制"解决方案,用于处理CodeIgnitr中的问题。

我喜欢CodeIgniter,因为它简单,占地面积小。但它的某些功能我不使用:我不使用提供的数据库连接系统,因为我有点控制狂,SQL注入非常普遍。因此,出于这个原因,我学会了如何在框架内偏离。

为了创建一个单独的"层"来容纳AJAX处理,并在实现中保持它的整洁,我只制作了一个独立的控制器对象,其具体工作是响应AJAX请求。通过这种方式,您的"网页"控制器与您的"Ajax"控制器是分开的。

class Ajax extends CI_Controller
{
    function __construct(){ parent::__construct();}
    function webserv(){ /* Your Web Service code here... */}
}

然后你会把你的AJAX请求指向这个URL:

http://www.example.com/ajax/webserv/