2011-02-03 6 views
1

J'ai un plugin jQuery dont j'ai besoin d'implémenter ajaxStop pour une partie de celui-ci. Ci-dessous un extrait de mon code pour montrer la structure (peut ne pas être 100%).jQuery ajaxStop dans ajax succès

J'ai montré comment mes fonctions sont configurées en tant que méthodes dans le cas où ajaxStop doit être implémenté comme une fonction globale, pas sûr comment je le ferais dans la configuration actuelle.

Le problème que je rencontre est parfois ajaxStop ne se déclenche pas même si ma réponse ajax revient avec succès. Puis-je appeler ajaxStop à partir d'un rappel ajax réussi?

  1. Quel élément dois-je appeler ajaxStop sur $(). AjaxStop OU $ (this) .ajaxStop

Merci beaucoup pour toute aide!

Aussi peut-être quelqu'un a eu des problèmes avec ajaxStop sur un Mac? Je ne trouve pas de solution pour expliquer pourquoi cela ne marche pas tout le temps.

Je pense que ajaxStop est pas très fiable :(

(function($) { 

$.fn.doRentalButtons = function($params) { 

    var newMethods = { 

     startAction:function() { 
      var $button = $('a.button'); 
      $button.click(function(){ 
       var params = {one:'something',two:'morethings'} 
       $(this).doAjax(params); 
      }); 
     }, 

     doAjax:function(params) { 

      $current_button = $(this); 
      $container_div = $('#container'); 

      $.ajax({ 
       type: 'POST', 
       url: 'whatever.html', 
       data: params, 
       success: function(data) { 
        //dostuff 

        var jQueryObject = 
        if (global_var_hide == 0) { 
         $(this).afterPostRequests($current_button); 
        } 
       }() 
      }); 
     }, 

     afterPostRequests:function($current_button) { 
      $().ajaxStop(function(){ 
       $(this).show(); 
       $(this).positionDiv($current_button); 
      }); 
     } 
    }; 

    $.each(newMethods, function(i) { 
     $.fn[i] = this; 
    }); 
}; 

})(jQuery); 

Répondre

2

Juste une mise à jour à ce sujet:.

J'ai fini avec un compteur au lieu de AjaxStop incrémenter le compteur sur chaque clic de bouton et. sur ajax succès/erreur moins 1 sur le comptoir.

Je ne diffusez que ma demande ajax si le compteur == 0.

T son semble fonctionner pour ce dont j'ai besoin pour. Mais cela semble être une solution temporaire et il y a probablement un meilleur moyen.

(function($) { 

$.fn.doRentalButtons = function($params) { 

    var ajax_busy = 0; 

    var newMethods = { 

     startAction:function() { 
      var $button = $('a.button'); 
      $button.click(function(){ 
       var params = {one:'something',two:'morethings'} 
       $(this).doAjax(params); 
      }); 
     }, 

     doAjax:function(params) { 

      $current_button = $(this); 
      $container_div = $('#container'); 

      ajax_busy++; 

      $.ajax({ 
       type: 'POST', 
       url: 'whatever.html', 
       data: params, 
       success: function(data) { 
        //dostuff 

        ajax_busy--; 

        var jQueryObject = $('#myDiv'); 
        if (ajax_busy == 0) { 

         jQueryObject.show(); 
         jQueryObject.positionDiv($current_button); 

        } 
       }, 
       error: function() { 
        ajax_busy--; 
       } 
      }); 
     } 
    }; 

    $.each(newMethods, function(i) { 
     $.fn[i] = this; 
    }); 
}; 

})(jQuery);