Desacoplando funções de retorno de chamada de sucesso de chamadas jQuery Ajax
Ao recuperar dados de um servidor usando jQuery ajax, é uma prática comum definir o sucesso função de retorno de chamada dentro do bloco .ajax(). Isso une fortemente o tratamento de retorno de chamada com a chamada AJAX, limitando a flexibilidade e a reutilização.
Para definir o retorno de chamada de sucesso fora do bloco .ajax(), normalmente é declarada uma variável para armazenar os dados retornados. No entanto, uma abordagem mais moderna usando objetos adiados é recomendada.
Desde o jQuery 1.5, os objetos adiados oferecem uma maneira melhor de lidar com operações assíncronas, como chamadas AJAX. Veja como você pode conseguir isso:
function getData() { return $.ajax({ url : 'example.com', type: 'GET' }); } function handleData(data /* , textStatus, jqXHR */ ) { alert(data); //do some stuff } getData().done(handleData);
Essa abordagem separa o tratamento de retorno de chamada da chamada AJAX, permitindo vários retornos de chamada, tratamento de erros e sincronização de eventos assíncronos com facilidade.
Por exemplo :
// Timer for demo purposes, resolves itself after 5 seconds var timer = $.Deferred(); setTimeout(timer.resolve, 5000); // Get data using AJAX and attach done and error handlers var ajax = getData().done(handleData).fail(error); // Wait for both AJAX and timer to finish before continuing $.when(timer, ajax).done(function() { // Both AJAX and 5s timer have finished }); // Additional callbacks can be added even after AJAX call finishes ajax.done(function(data) { //Do some stuff with data });
Isso demonstra o poder dos objetos diferidos, permitindo maior controle e flexibilidade sobre operações assíncronas em aplicativos jQuery.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3