[ Dica PHP ] – Como detectar solicitações em Ajax via PHP

Me deparei com esta necessidade hoje, e decidi compartilhar esta dica.
Se você precisa detectar se a solicitação está sendo feita via ajax,
especialmente em casos onde formulários ou páginas de uma aplicação são submetidos via ajax,
e você queira prevenir o acesso direto via URL, o PHP dispõe de um índice na variável global $_SERVER chamado ‘HTTP_X_REQUESTED_WITH’ que permite retornar se uma solicitação é ajax ou não.
Vamos ver como utilizar este recurso então!
Leia mais

Solicitações Ajax com Zend Framework

O objetivo deste post é dar uma dica de como utilizar solicitações em Ajax com o Zend Framework, uma vez que todas as solicitações são chamadas carregando layout e views, é preciso definir algumas coisinhas para tudo ficar legal!

Para testar vamos criar um controlador chamado resultado e duas ações index e produtos.

Você pode usar qualquer coisa que quiser ali.

Controlador Resultado


// Salve em application/ResultadoController.php
class ResultadoController 
extends Zend_Controller_Action
{
    public function init() { // aqui vem a mágica depois }
    public function indexAction(){}
}
<strong>Acão Produtos</strong>

 lang="php"]
// Salve em scripts/views/resultado/produtos.phtml
<ul> 
    <?php foreach( $this->produtos as $produto) :  ?>
	<li><?=$produto;?></li>
    <?php endforeach; ?>
</ul>

Para testar o resultado, coloque na Ação index do Controlador o código abaixo:

Acão Index


// Salve em scripts/views/resultado/index.phtml
<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <div id="ajax"></div>
        <script type="text/javascript">
            // pode ser no onload para testes
            jQuery( function() {
                $.ajax( {
                    type: "GET",
                    url: '/resultado/produtos/c/' 
                         + Math.random(),
                    success: function( dados ) {
                        $( '#ajax' ).html( dados )
                    }
                } );
            } )
        </script>
    </body>
</html>

Atualize sua a página index e veja que o ajax carregou tudo, incluindo layout e HTML.

Para fins de testes, vamos fazer o seguinte:

Modifique o método ini() do controlador Resultado e acrescente as linhas abaixo


public function init()
{
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);
}

Agora teste novamente atualizando a página, e veja que o conteudo saiu vazio.

Agora modifique apenas o valor de setNoRender(true) para setNoRender(false).

Atualize a pagina e veja que agora, somente o conteúdo da ação produtos foi carregada.

Bom, é isto ai. Alguma coisa errada ou dúvida postem nos comentários.

Serializar Checkboxes – Converter Valores do checkbox em String

Estes dias na empresa que trabalho, lá estava eu na boa, curtindo um cafézinho expresso, quando me chega a secretária “Gilbeeeeeeeeeeeertoooooooooo, o botão enviar não está enviando, vou ter que digitar tudo de novooooooooooooo”.

Então pensei em resolver o problema, é claro, sou pago pra resolver problemas.

Entretanto, me deparei com uma situação digamos um tanto “estressante”.

Ter que criar cookies para mais de 55 campos do formulario de cadastro para quando o botão enviar não funcionar não se perderem os dados.

Cheio de frescura, inventei de criar este sistema em ajax, até que ficou bem interessante, entretanto, como as solicitações são enviadas via GET, como fazer com os “checkboxes”.

Ai, que dor de cabeça… mas depois de usar uma lógica, consegui fazer o que queria, e por isto gostaria de mostrar para vocês como fiz para serializar, ou seja, transformar os valores dos checkboxes, que são um Array em String.

Comentários explicam o que fiz:

<html>

<head>

<title>Serializar Checkbox</title>

<script src="http://code.jquery.com/jquery-latest.js"></script>

<script>

// jquery para evento onclick no botao com id teste

$(document).ready(

function()

{

$("#teste").click(

function() {

serializaCheckbox();

}

);

}

);

function serializaCheckbox()

{

// iniciamos uma string com aspas indicando o vazio;

var string = '&string=';

// Pegamos o elemento pelo seu nome, no caso 'input'

var inputs = document.getElementsByTagName('input');

// damos um loop na quantidade de elementos encontrados

for( var x = 0; x < inputs.length; x++ )

{

// verificamos se o tipo do mesmo é "checkbox" e se o atributo name é igual à 'campo'

if(inputs[x].type == "checkbox" && inputs[x].name == 'campo')

{

// verificamos se o elemento está marcado

if(inputs[x].checked == true)

{

// concatenamos o valor colocando uma virgula no final

string += inputs[x].value + ',';

}

}

}

// verificamos se o ultimo caractere é uma virgula, e sempre será

if (/,$/.test(string)) {

// substituimos o mesmo por um vazio

string=string.replace(/,$/,"")

}

alert(string);

}

</script>

</head>

<body>

<form>

<input type="button" id="teste" value="Testar" />

<br />

<input name="campo" type="checkbox" value="Azul" />Azul<br />

<input name="campo" type="checkbox" value="Vermelho" />Vermelho<br />

<input name="campo" type="checkbox" value="Verde" />Verde<br />

<input name="campo" type="checkbox" value="Preto" />Preto<br />

</form>

</body>

</html>

Ajax com jQuery com $.ajax() e load()

Com a explosão da Web 2.0 uma tecnologia ficou muito popular, estamos falando do AJAX, que do inglês quer dizer Asynchronous Javascript And XML.

Resumidamente, com Ajax ficou possível buscar ou enviar dados no servidor sem precisar sair da página em uso. Isto é muito útil pois dá uma sensação de “Em Tempo Real”.

Leia mais