Symfony - Controle Ajax
AJAX é uma tecnologia moderna em programação web. Ele fornece opções para enviar e receber dados em uma página da Web de forma assíncrona, sem atualizar a página. Vamos aprender programação Symfony AJAX neste capítulo.
O framework Symfony oferece opções para identificar se o tipo de solicitação é AJAX ou não. A classe Request do componente Symfony HttpFoundation tem um método, isXmlHttpRequest () para este propósito. Se uma solicitação AJAX for feita, o método isXmlHttpRequest () do objeto de solicitação atual retornará verdadeiro, caso contrário, será falso.
Este método é usado para lidar com uma solicitação AJAX corretamente no lado do servidor.
if ($request->isXmlHttpRequest()) {
// Ajax request
} else {
// Normal request
}
Symfony também fornece uma classe de resposta baseada em JSON, JsonResponse, para criar a resposta no formato JSON. Podemos combinar esses dois métodos para criar um aplicativo da web baseado em AJAX simples e limpo.
AJAX - Exemplo de Trabalho
Vamos adicionar uma nova página, student/ajax no aplicativo do aluno e tente buscar as informações do aluno de forma assíncrona.
Step 1 - Adicione o método ajaxAction em StudentController (src / AppBundle / Controller / StudentController.php).
/**
* @Route("/student/ajax")
*/
public function ajaxAction(Request $request) {
$students = $this->getDoctrine()
->getRepository('AppBundle:Student')
->findAll();
if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) {
$jsonData = array();
$idx = 0;
foreach($students as $student) {
$temp = array(
'name' => $student->getName(),
'address' => $student->getAddress(),
);
$jsonData[$idx++] = $temp;
}
return new JsonResponse($jsonData);
} else {
return $this->render('student/ajax.html.twig');
}
}
Aqui, se a solicitação for AJAX, buscamos informações do aluno, codificamos como JSON e retornamos usando JsonResponseobjeto. Caso contrário, apenas renderizaremos a visualização correspondente.
Step 2 - Crie um arquivo de visualização ajax.html.twig no diretório de visualizações do aluno, app/Resources/views/student/ e adicione o seguinte código.
{% extends 'base.html.twig' %}
{% block javascripts %}
<script language = "javascript"
src = "https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script language = "javascript">
$(document).ready(function(){
$("#loadstudent").on("click", function(event){
$.ajax({
url: '/student/ajax',
type: 'POST',
dataType: 'json',
async: true,
success: function(data, status) {
var e = $('<tr><th>Name</th><th>Address</th></tr>');
$('#student').html('');
$('#student').append(e);
for(i = 0; i < data.length; i++) {
student = data[i];
var e = $('<tr><td id = "name"></td><td id = "address"></td></tr>');
$('#name', e).html(student['name']);
$('#address', e).html(student['address']);
$('#student').append(e);
}
},
error : function(xhr, textStatus, errorThrown) {
alert('Ajax request failed.');
}
});
});
});
</script>
{% endblock %}
{% block stylesheets %}
<style>
.table { border-collapse: collapse; }
.table th, td {
border-bottom: 1px solid #ddd;
width: 250px;
text-align: left;
align: left;
}
</style>
{% endblock %}
{% block body %}
<a id = "loadstudent" href = "#">Load student information</a>
</br>
</br>
<table class = "table">
<tbody id = "student"></tbody>
</table>
{% endblock %}
Aqui, criamos uma tag âncora (id: loadstudent) para carregar as informações do aluno usando a chamada AJAX. A chamada AJAX é feita usando JQuery. O evento anexado à tag loadstudent é ativado quando um usuário clica nele. Em seguida, ele buscará as informações do aluno usando a chamada AJAX e gerará o código HTML necessário de forma dinâmica.
Step 3- Por fim, execute o aplicativo, http://localhost:8000/student/ajax e clique na guia Carregar âncora de informações do aluno.