Codeigniter 如何处理普通请求和ajax请求

php中文网
发布: 2016-06-06 20:49:15
原创
1641人浏览过

在Codeigniter中,所有的请求一般都对应于一个Controller中的函数, 如果对于不同的请求,如ajax和普通请求,返回的东西一般都会不一样 如this->load->view 或者直接echo。

两种方法写在一起让我感觉特别不爽,我设想了一种方案就是使用Http头中的Accept,如何产生一种方式,就是在一个函数中,不同的请求输出不同的view样式,比如ajax请求这个函数,就返回json格式,普通请求,就返回HTML。 请问我想要这样的效果,怎么做才好。

回复内容:

在Codeigniter中,所有的请求一般都对应于一个Controller中的函数, 如果对于不同的请求,如ajax和普通请求,返回的东西一般都会不一样 如this->load->view 或者直接echo。

两种方法写在一起让我感觉特别不爽,我设想了一种方案就是使用Http头中的Accept,如何产生一种方式,就是在一个函数中,不同的请求输出不同的view样式,比如ajax请求这个函数,就返回json格式,普通请求,就返回HTML。 请问我想要这样的效果,怎么做才好。

ajax 请求一盘只管返回 json 数据,不会直接给 html 的,而 view 是直接 include 的 view,原理不一样吧,如果你非要这么种,那么自定义一下 view 方法即可:

public function loadView($view, $data) {

    if( $this->input->is_ajax_request() ) {
        echo $this->load->view($view, $data, TRUE);
        exit;
    }

    // 如果是 ajax 不会执行到这里
    $this->load-<view($view, $data);
}
登录后复制

以后你载入 view 时,使用 $this->loadView($viewName, $data) 而不再使用 $this->load->view(); 即可,这个 loadView 方法你可以写在父 Contrller 里面,这只是思路,你可以按需求来定制!

在CodeIgniter的输入类中已经提供了is_ajax_request()方法来判断是否为ajax请求了,可以用$this->input->is_ajax_request()的形式来调用。

参见http://codeigniter.org.cn/user_guide/libraries/input.html。

首先,根据“单一职能原则”,是不建议你这样设计一个功能的。 你可以把主要功能封装成一个可调用的方法,然后在不同的controller里面分别调用这个方法来处理。 另外,json也是view的一种展现形式,所以你完全可以把数据都传进view里面,只是两个view不同在于,一个是HTML展示,一个是json展示

为什么不在请求中添加一个请求参数来区分终端呢?

剑鱼论坛系统
剑鱼论坛系统

一款轻论坛系统,由鲶鱼CMS官方开发并发布,剑鱼系统有着轻便、快捷、稳定、易用的特点,系统针对论坛类网站的特点进行了专门的设计和制作,可适应在大数据量下保持高负载访问能力,系统访问速度在普通软硬件环境下处理单次请求可达到0.01秒级别,运行环境的软硬件配置高的情况下可达到0.00X秒。

剑鱼论坛系统 254
查看详情 剑鱼论坛系统

实在不行用UA也能区分的吧。

define('ISAJAX', isset($SERVER['HTTPXREQUESTEDWITH']) && strtolower($SERVER['HTTPXREQUESTED_WITH']) == 'xmlhttprequest');

判断的时候这样 if(IS_AJAX) { 。。。 } else { 。。。 }

相关标签:
php
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号