-1
votes

Comment obtenir plusieurs réponses AJAX dans une seule fonction

Je ne sais pas si c'est possible, mais j'essaie d'obtenir plusieurs réponses AJAX et d'accéder à ses valeurs dans une autre fonction.

I Obtenez les réponses (deux fois chacune), mais je ne suis pas capable de Renvoie les réponses Valeurs individuelles. P>

Jsfiddle P>

P>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


1 commentaires

La réponse 2 est Alway non défini , puisque les deux appel à test ne transmet jamais le second paramètre "code> réponse2


3 Réponses :


1
votes

Il existe différentes façons de réaliser cela. Personnellement, j'irais avec promesses . xxx

dans le test fonction Vous appelez un promess.All qui Attend que toutes les promesses individuelles doivent être résolues et émettent le résultat en tant que tableau dans l'ordre des promesses qui lui ont été transmises au moment de l'appel.


1 commentaires

Retour Nouvelle promesse ((résolution, rejet) => {$ .ajax ({....}) ...}) - ou, comme je le ferai - retour $. ajax ({....}) - parce que jquery.ajax renvoie une promesse (de tres) - ou même retour promesse.resolve ($ ajax ({...})) Pour enlever certaines bizarreries de promesses de JQUERY précoces



-4
votes

AJAX Les appels sont asynchrones, donc si vous souhaitez gérer les deux résultats dans une seule fonction, vous devez faire un comptoir vous-même, quelque chose comme celui-ci pour le type le plus simple: xxx

Il y a plusieurs autres manière avancée de le gérer, comme en utilisant async / attendre ou quelque chose, mais cela devrait faire effectuer votre travail sans trop de modification à votre code existant.

mise à jour: pour la manière ASYNC / Attendre la manière dont ma façon préférée de Faire des choses de nos jours: xxx


1 commentaires

Si vous ne voulez pas qu'il fonctionne de manière synchrone, vous pouvez toujours utiliser la méthode plus brute ci-dessus à la place, je ne vois rien dans la question posée contre l'exécution des deux demandes de manière synchrone, juste pour gérer deux demandes dans une seule fonction, où manipulation de la manutention Leur synchronité est bien iMho.



0
votes
let urls = ['https://cors-anywhere.herokuapp.com/http://api.icndb.com/jokes/random',
    'https://cors-anywhere.herokuapp.com/https://official-joke-api.appspot.com/random_joke'];

let structure = {
    method: 'GET',
    contentType: 'application/json',
};

async function first() {
    try {
        const response = await $.ajax({
            url: urls[0],
            structure,
        });

        return response;
    } catch(error) {
        // Error
    }

}

async function second() {
    try {
        const response = await $.ajax({
            url: urls[1],
            structure,
        });

        return response;
    } catch(error) {
        // Error
    }
}

async function test() {
    let response = await ('s')
    return response
}

first()
    .then(() => second());

0 commentaires