如何区分php(或codeigniter)中的ajax调用和浏览器请求?
Posted
技术标签:
【中文标题】如何区分php(或codeigniter)中的ajax调用和浏览器请求?【英文标题】:how to differentiate ajax call and browser request in php (or codeigniter)? 【发布时间】:2011-10-19 21:20:09 【问题描述】:有没有办法区分 php 中的 ajax 调用和普通浏览器请求(或具体的 codeigniter)?
这是我的 jquery ajax 调用:
$(document).ready(function()
$('#container').load('http://localhost/index.php/customer/');
);
这是codeigniter中客户控制器的索引方法:
public function index()
//if (call == 'ajax request')
// do this if it's an ajax request;
//else
// do that if user directly type the link in the address bar;
$this->load->view('customer/listview');
任何帮助将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:CodeIgniter 方式..
$this->input->is_ajax_request()
【讨论】:
哇,它有效。猜想我没有彻底阅读输入类。非常感谢。【参考方案2】:function getIsAjaxRequest()
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
在某个地方定义这个函数,然后当然可以像这样使用它:
if (getIsAjaxRequest())
// do this
else
// do that
但在 CodeIgniter 中可能已经实现了这样的东西,只是全局搜索 HTTP_X_REQUESTED_WITH
【讨论】:
这是 $this->input->is_ajax_request() 在 codeigniter 中。但了解该方法的实际工作原理是+1 的经验。谢谢。【参考方案3】:if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
应该做你需要的。虽然它显然可以像任何其他 HTTP Header 一样被伪造,所以不要依赖它来做任何重大的事情。
【讨论】:
【参考方案4】:这是 Codeigniter 对该功能的实现。
if($this->input->isAjax())
【讨论】:
【参考方案5】:而不是依赖可能会更改的服务器变量,例如。如果服务器位于反向代理后面,我会通过一个 javascript 函数执行所有 AJAX 调用,在该函数中添加一个 POST 变量:isajax。然后我使用 $this->UI->IsAJAX() 之类的东西检查它,它会查找在设置控制器时初始化的变量。
$this->_isAJAX = (empty($_POST['isajax']) ? true : false.
【讨论】:
如果您不使用框架,我的回答很有用,我不建议您编写自己的函数来进行 AJAX 调用和设置 POST 变量(当然除了应用程序逻辑)。以上是关于如何区分php(或codeigniter)中的ajax调用和浏览器请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何删除codeigniter路径中的“index.php”
如何在 codeigniter(或 php)中获取插入的新 id? [复制]