Detectando Requisições Ajax com PHP

É bem comum trabalharmos com requisições Ajax que batem em um servidor rodando alguma aplicação PHP. O problema é que as vezes utilizamos o mesmo método para atender tanto a arquitetura do seu sistema quanto as requisições que são feitas via Ajax.

Por exemplo: Temos um objeto PHP que tem como objetivo recuperar todas as notícias cadastradas na base de dados.
[php]
<?php
class MinhaClasse {
public function getAllNews(){
// implementação para receber as notícias

return $news;
}
}
?>
[/php]

Como eu faço para que este mesmo método supra as minhas requisições Ajax sem que eu tenha que criar outro?

É bem comum vermos por aí programadores criando dois objetos diferentes para atender as duas necessidades (aplicação e Ajax). Sendo que a única diferença entre eles é como o método retorna.

Podemos utilizar o mesmo método e fazer com que retorne de forma diferente dependendo de como eu estou chamando o método.

Vamos criar um método chamado isAjax():

[php]
public function isAjax(){
return (!empty($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’);
}
[/php]

Funciona de forma simples: Sempre que uma requsição Ajax é disparada um header é setado nesta requisição chamada HTTP_X_REQUESTED_WITH e o valor dela é setado como XMLHttpRequest.

Desta forma a nossa classe ficaria assim:

[php]
<?php
class MinhaClasse {
public function isAjax(){
return (!empty($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) == ‘xmlhttprequest’);
}
public function getAllNews(){
// implementação para receber as notícias
// ..

// se o metodo for invocado via Ajax, retorne um JSON
if($this->isAjax()) {
echo json_encode($news);
} else {
return $news;
}

}
}
?>
[/php]

Veja que se a requisição for feita via Ajax o método dar um echo JSON de $news. Se o método for invocado de qualquer outra forma ele irá retornar normalmente.

É isso. Post rápido, pá pum 😀

[]’s
Igor.

7 thoughts on “Detectando Requisições Ajax com PHP

  1. Acho que você precisa ver nos headers do request quem é o referrer para fazer tal bloqueio.
    A versão 1 do (objeto) XMLHttpRequest não permitia requisições cross domain, mas a 2 agora permite – com algumas regras de permissionamento. Dê uma olhada 😉

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: