如何在Jquery中删除函数的调用?

时间:2016-07-27 22:51:19

标签: javascript jquery ajax

我有以下问题,当我开始我的应用程序充电一个名为Ficha()的函数,这是一个ajax调用,这很好。问题出现在另一个ajax调用充电html标签需要调用函数Ficha(),问题是这个加载HTML内容n次执行,并且当你调用功能卡已经加载了这些执行了n次还抛出“超出最大调用堆栈大小”错误。

$(document).ready(function () {

/**
 * Mostrar la lista correspondiente
 **/

var buscanombre = $('#buscanombre');
buscanombre.click(function (e) {
    e.stopPropagation();

    if (buscarNombre.hasClass('active')) {
        resultadoBus.find('ul').empty();
        BuscarNombre();
        resultadoBus.show();

    } else if (buscarServicio.hasClass('active')) {

        resultadoBus.find('ul').empty();
        BuscarServicio();
        resultadoBus.show();

    } else if (buscarUbicacion.hasClass('active')) {

        resultadoBus.find('ul').empty();
        BuscarUbicacion();
        resultadoBus.show();

    }
    _iBpNActivo = 0;
}).keyup(EfectoKeyup);

Ficha();});
function BuscarNombre() {

$.ajax({
    type: 'GET',
    url: baseUrl + 'site/getfichas',
    success: function (result) {
        listFichasResultados = [];
        var ResultadoBus = resultadoBus.find('ul');
        ResultadoBus.empty();
        var categoria;
        $.each(result, function (index, item) {

            switch (item.categoria) {
                case 'masaje':
                    categoria = '<span class="s-masajes">masajes</span>';
                    break;
                case 'VIP':
                    categoria = '<span class="s-vip">vip</span>';
                    break;
                case 'PREMIUM':
                    categoria = '<span class="s-premium">premium</span>';
                    break;
                case 'GOLD':
                    categoria = '<span class="s-gold">gold</span>';
                    break;
                case 'madura':
                    categoria = '<span class="s-maduras">maduras</span>';
                    break;
                case 'fantasia':
                    categoria = '<span class="s-fantasia">fantasia</span>';
                    break;
                case 'shemale':
                    categoria = '<span class="s-fantasia">shemale</span>';
                    break;
            }

            ResultadoBus.append(
                '<li idFichas="' + item.idFicha + '" data-modal="ficha-full" class="md-trigger" nombrePortada="' + item.nombre + '">' + item.nombre
                + categoria +
                '</li>'
            );

            listFichasResultados.push('<li idFichas="' + item.idFicha + '" data-modal="ficha-full" class="md-trigger" nombrePortada="' + item.nombre + '">' + item.nombre + categoria + '</li>');

        });
        ModalEffects();
        Ficha();
    }
});}

1 个答案:

答案 0 :(得分:0)

我们的想法是创建一个对象来包装函数,以便能够管理函数是否已经运行,或者它已经完成并将再次运行。

也是xhrCount,因为你说你使用了很多ajax调用,以及知道所有调用是否都已完成的方法,你只能在回调上这样做,所以在ajax调用的一边计算,并且eacc一次更新它完成了它的回调,当计数器满足0时,你就知道它完成了并且你释放了它。

var runOneAtATime = {
   running : false,
   xhrCount : 0,
   freeRunning : function(){
     if (--xhrCount === 0){
        console.log('running'); 
     } else {
        this.running = false; 
     }
   },
   runOneAtATime : function (){
      if (this.running === true){
         console.log('running');
         return;
      }
      this.running = true;
      var self = this; //so you be able to call in in callbacks
      //do work
      //each ajax.complete calls self.freeRunning()
   }
}

编辑:评论