J'ai quatre appels Ajax sur ma page. Je veux toujours donner la première priorité au premier appel ajax et tous les autres appels ajax doivent attendre la fin du premier ajax même s'il est invoqué. Y a-t-il un moyen où nous donnons la première préférence au premier appel ajax?

Ajax 2 et Ajax 3 seront déclenchés en cliquant sur le bouton. on ne peut pas mettre Ajax 2 et Ajax 3 sur le succès de l'appel ajax

//ajax 1
    $.ajax({
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      type: 'GET',
      dataType: 'json',
      url: //URL
    })
 //ajax 2
    $.ajax({
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      type: 'GET',
      dataType: 'json',
      url: //URL
    })
 //ajax 3
    $.ajax({
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      type: 'POST',
      dataType: 'json',
      url: //URL
    })
 //ajax 4
    $.ajax({
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
      type: 'GET',
      dataType: 'json',
      url: //URL
    })
-5
ezhil 12 avril 2018 à 17:58

3 réponses

Meilleure réponse

Oui, vous pouvez. Lancez simplement le reste des appels lorsque le premier se résout:

$.ajax( ... )  // First AJAX
  .then(function(response) {

    // Play with the response of first AJAX operation        

    return $.when([
      $.ajax( ... ), // Second AJAX
      $.ajax( ... ), // Third AJAX
      $.ajax( ... )  // Fourth AJAX
    ]);
  })
  .then(function(response) {
    // Play with the response of rest of the AJAX operations.
  })
2
31piy 12 avril 2018 à 15:00

Veuillez utiliser la méthode Done.

// ajax 1
$.ajax({
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  type: 'GET',
  dataType: 'json',
  url: //URL
}).done(function() {
    // ajax 2
    // ajax 3
    // ajax 4
});

Pour plus de détails, consultez la documentation de l'API: http://api.jquery.com/jquery.ajax/

0
Willans 12 avril 2018 à 15:09

Chaque fois que vous effectuez ajax1, enregistrez la promesse retournée dans une variable globale (disons ajax1Promise).

Sur les gestionnaires de boutons de 2 et 3, utilisez ce code:

ajax1Promise.done(function(){ajax2()});
ajax1Promise.done(function(){ajax3()});

Respectivement.

mise à jour: en fournissant un exemple. Je simule ajax en renvoyant des promesses personnalisées avec une résolution retardée. Vérifiez simplement les journaux de la console: https://jsfiddle.net/1gopxj49/13/

Dans cet exemple, si ajax2 / ajax3 sont démarrés pendant que ajax1 est en cours, ils attendront la fin.

0
Marinos An 12 avril 2018 à 16:08