如何在php(或codeigniter)中区分ajax调用和浏览器请求?

时间:2011-08-04 10:56:30

标签: php jquery ajax codeigniter

有没有办法区分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');
}

任何帮助将不胜感激。感谢。

5 个答案:

答案 0 :(得分:5)

CodeIgniter方式..

$this->input->is_ajax_request()

答案 1 :(得分:3)

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

答案 2 :(得分:1)

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {}

应该做你需要的。虽然它可以像任何其他HTTP标头一样伪造,但所以不要依赖它来做任何重大的事情。

答案 3 :(得分:0)

这是Codeigniter对此功能的实现。

if($this->input->isAjax()) {

        }  

答案 4 :(得分:0)

而不是依赖可能会改变的服务器变量,例如。如果服务器在反向代理后面,我通过一个javascript函数执行所有AJAX调用,在其中我添加一个POST变量:isajax。然后我使用类似$ this-> UI-> IsAJAX()的方法检查它,它查找在设置控制器时初始化的变量。

$this->_isAJAX = (empty($_POST['isajax']) ? true : false.