Maison  >  Article  >  cadre php  >  Implémentation de requêtes asynchrones Laravel

Implémentation de requêtes asynchrones Laravel

王林
王林original
2023-05-20 17:18:391354parcourir

Dans les applications web, les requêtes asynchrones sont une technologie très utile. En exécutant les requêtes en arrière-plan, cela évite la perte de temps causée par l'attente de la réponse du serveur en front-end et améliore également l'expérience utilisateur. Dans le framework Laravel, nous pouvons utiliser certaines méthodes pour implémenter des fonctions de requête asynchrone.

1. Qu'est-ce qu'une requête asynchrone

La requête asynchrone est une technologie qui envoie une requête au serveur sans actualiser la page entière et traite la requête en arrière-plan. Cette technologie peut être appliquée dans différents scénarios, par exemple lorsque nous devons afficher la barre de progression d'une certaine tâche ou lorsque la page de paiement doit s'actualiser automatiquement afin que les clients puissent ressentir le succès de leur paiement.

2. Comment utiliser les requêtes asynchrones dans Laravel

1 Utilisez la méthode ajax dans jQuery pour implémenter les requêtes asynchrones.

Vous pouvez facilement l'utiliser avec jQuery dans Laravel pour implémenter des fonctions de requête asynchrone. Nous pouvons terminer ce processus en suivant les étapes suivantes :

Tout d'abord, nous devons introduire le fichier de la bibliothèque jQuery. Cette étape peut être effectuée dans l'en-tête ou en haut de notre modèle HTML :

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

Ensuite, nous devons écrire le code pour envoyer la requête asynchrone. Cet extrait de code peut être inclus dans n'importe quelle fonction de gestion d'événements, par exemple après que l'utilisateur clique sur un bouton :

$(document).ready(function(){
    $('#btn-submit').click(function(e){
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: '/payment',
            data: {
                'amount': $('#amount').val(),
                'payment_method': $('#payment_method').val(),
                '_token': $('input[name="_token"]').val()
            },
            success: function(data){
                console.log('success');
                console.log(data);
                //在此处将返回的data数据展示在前端页面上
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                console.log('error');
                console.log(XMLHttpRequest);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    });
});

2 Utilisez la fonction de file d'attente de Laravel pour implémenter des requêtes asynchrones.

La couche inférieure de Laravel est livrée avec un système de file d'attente pour exécuter des tâches en arrière-plan. En utilisant un système de file d'attente, nous pouvons éviter le problème du client qui attend longtemps la réponse du serveur, et nous pouvons également gérer l'exécution de toutes les tâches en arrière-plan pour une meilleure planification et optimisation.

Ensuite, nous utiliserons le système de file d'attente de Laravel pour définir les étapes de traitement des requêtes asynchrones.

Tout d'abord, nous devons définir une nouvelle classe de tâches. Cette classe doit hériter de la classe de tâches native de Laravel et implémenter la méthode handle() dans cette classe. Le modèle de base peut être le suivant : handle()方法。基本模板可以如下所示:

namespace AppJobs;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class ProcessPayment implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $amount;
    protected $paymentMethod;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($amount, $paymentMethod)
    {
        $this->amount = $amount;
        $this->paymentMethod = $paymentMethod;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //在此处执行异步请求所需的所有工作,比如HTTP请求或电子邮件发送。

        //处理请求完毕后将结果保存在数据库中,供前端页面读取。
    }
}

接下来,我们可以将异步请求的处理逻辑放在handle()

public function submitPayment(Request $request)
{
    $amount = $request->input('amount');
    $method = $request->input('payment_method');
    ProcessPayment::dispatch($amount, $method); //触发异步请求任务
    return response()->json(['message' => 'success']);
}

Ensuite, nous pouvons mettre la logique de traitement des requêtes asynchrones dans la méthode handle(). En effectuant cette tâche sur le backend, vous pouvez éviter le problème d'une mauvaise expérience utilisateur causée par le gel des pages, et en même temps, l'ensemble de la requête ne sera pas ralentie par le temps d'exécution du backend.

Enfin, nous pouvons déclencher cette tâche dans une méthode contrôleur pour implémenter le traitement asynchrone des requêtes. Par exemple :

rrreee

3. Résumé

Les requêtes asynchrones jouent un rôle très important dans le développement d'applications web. L'utilisation de la technologie de requête asynchrone peut rendre nos applications plus rapides et plus fluides, améliorant ainsi l'expérience utilisateur. Dans le framework Laravel, nous pouvons utiliser la méthode ajax de jQuery ou le système de file d'attente de Laravel pour implémenter des fonctions de requête asynchrone. Quelle que soit la méthode que vous utilisez, il est important de garder à l’esprit que les requêtes asynchrones rendent les applications plus rapides, plus efficaces et plus conviviales. J'espère que cet article pourra vous aider lors de la mise en œuvre de requêtes asynchrones. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn