我有以下问题,当我开始我的应用程序充电一个名为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();
}
});}
答案 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()
}
}
编辑:评论