Como descobrir se a requisição é AJAX com o php

by @emersonbroga. 8 Comments

Olá ….

Vi pelo twitter um post do @ErickBelfy que tinha um link para o site http://www.electrictoolbox.com/how-to-tell-ajax-request-php/ e resolvi postar em meu blog essa dica.

Geralmente quando eu envio uma requisição ajax para o php eu passo via GET um valor informando que o processamento é assincrono então eu faço algo do tipo

pagina.php?ajax=1

<?php if(isset($_GET['ajax']) //é requisição ajax else // requisição comum. ?>

O interessante é que usando a variavel $_SERVER eu consigo identificar se a requisição é assincrona ou não:

<?php if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') //é uma requisição ajax else // é uma requisição comum ?>

e para melhorar o código fica mais prático criar uma constante que contenha esse valor

<?php define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); //então if(IS_AJAX) //é uma requisição ajax else //é uma requisição comum ?>

#ficaADica

Obrigado por visitar o blog.
[ratings]

  • http://diegoholiveira.com Diego Henrique

    Vale lembrar que por padrão o javascript não envia este header. Diversos frameworks como jQuery, Dojo e outros, já enviam este header por padrão, ou seja, se você não usa algum framework JS você precisa setar este header na mão quando abrir um XMLHttpRequest.

    :)

  • Bruno Pulis

    Parabéns pelo post Broga

  • Show

    de bola

  • Giovanni

    Valeu!!!

  • http://www.williamrufino.com.br William Rufino

    Boa dica! :)

    alguns frameworks já trazem essa checagem como o codeigniter, é mto util fazer essa diferença!

  • @emersonbroga

    Sim sim … os frameworks já vem com essa checagem!

  • Danilo Morães

    Emboras seja possível fazer comparações entre strings com o operador ==, é aconselhado utilizar a função strcmp. Nesse caso funciona perfeitamente, mas dependendo as operações feitas antes da comparação, pode dar caca.

    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH']), ‘xmlhttprequest’) === 0)

    #ficadica

  • Danniel

    Assim:

    XMLHttpRequest.setRequestHeader(“x_requested_with”, “xmlhttprequest”);