Mon fichier PHP fait 2 opérations: 1. Soumet les données du formulaire dans la table db, 2. Envoie un e-mail.

Ce que je veux faire, c'est afficher les messages d'état via ajax. Par exemple, "Première opération terminée, veuillez attendre la seconde", puis lorsque la deuxième sera terminée, afficher le message suivant "Deuxième opération également". Maintenant, mon ajax ressemble à ça.

Comment puis-je le modifier?

//add status data to form
        form.data('formstatus', 'submitting');

        if (validate()) {
            //send data to server for validation
            $.ajax({
                url: formUrl,
                type: formMethod,
                dataType: "json",
                data: formData,
                success: function (data) { 
                    $.notifyBar({
                        cls: data.status,
                        html: data.message
                    });
                    form.data('formstatus', 'idle');
                }
            });

        }
4
Tural Ali 12 nov. 2011 à 17:03

3 réponses

Meilleure réponse

Dans le bloc de réussite, vous pouvez effectuer un autre appel ajax. C'est le plus simple. Vous pouvez le faire dans .success (), .ajaxSucces (), .complete () ou .then () comme ceci: $ .ajax (...). Success (...);

Idéalement, vous incorporeriez le code dans une fonction, par exemple

$.ajax({
    url: formUrl,
    type: formMethod,
    dataType: "json",
    data: formData,
    success: function (data) {
        notifyResponse(data); 
        form.data('formstatus', 'idle');
        sendMail();
    }
});

function sendMail() {
    $.get(mailUrl, function(data) {   // or $.post(...
        notifyResponse(data);
    });
}

function notifyResponse(data) {
    $.notifyBar({
        cls: data.status,
        html: data.message
    });
}
3
roselan 12 nov. 2011 à 14:28

Une autre approche différente de celle suggérée par stivlo consiste à utiliser une sorte d'interrogation longue comme celle expliquée dans cette réponse:

Comment puis-je implémenter le "Long Polling" de base?

Pas si simple et avec un problème plus technique sur la configuration du serveur.

0
Community 23 mai 2017 à 11:59

Si vous devez effectuer deux opérations qui ont des temps d'exécution différents, envoyez simplement deux requêtes AJAX différentes et obtenez-en les réponses.

Divisez votre service PHP en deux parties. Si la deuxième partie dépend de la première, au lieu d'envoyer les deux demandes en même temps, envoyez la deuxième demande lorsque la première revient.

En d'autres termes, dans votre rappel de réussite, vous allez informer l'utilisateur que la première opération est terminée et vous passez à la deuxième opération, dont le rappel de succès informera que la deuxième opération est terminée.

3
stivlo 12 nov. 2011 à 13:15