如何区分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? [复制]

如何删除 codeigniter 代码中的 index.php?

与Codeigniter 3.1.9的PayPal集成错误

如何删除codeigniter路径中的index.php?

如何在php/codeigniter或mysql中获得两个相差20分钟的日期的所有组合