在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。 请问我想要这样的效果,怎么做才好。
在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展示
define('ISAJAX', isset($SERVER['HTTPXREQUESTEDWITH']) && strtolower($SERVER['HTTPXREQUESTED_WITH']) == 'xmlhttprequest');
判断的时候这样 if(IS_AJAX) { 。。。 } else { 。。。 }
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答722 阅读✓ 已解决
2 回答2.3k 阅读
1 回答687 阅读✓ 已解决
ajax 请求一盘只管返回 json 数据,不会直接给 HTML 的,而 view 是直接 include 的 view,原理不一样吧,如果你非要这么种,那么自定义一下 view 方法即可:
以后你载入 view 时,使用 $this->loadView($viewName, $data) 而不再使用 $this->load->view(); 即可,这个 loadView 方法你可以写在父 Contrller 里面,这只是思路,你可以按需求来定制!