Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia Galera!!!
Estou desenvolvendo (tentando) um sistema de atendimento online...
"Aparentemente" ele está funcionando certinho, só que acho que há erros de otimização...
Pois tem horas que ele envia tanto requisição ajax para o servidor que chega a travar o Xampp...
Segue código JS para darem uma olhada...
<script>
function inicia_chat(){
ultima_resposta = null;
var form = $('#dados_atendimento');
form.submit(function(){
return false;
});
form.ajaxSubmit({
url:"crud.php",
data: {acao: "iniciar_chat"},
success: function(resposta){
if(resposta == 0){
$("#mensagens_dados_atendimento").attr("class","");
$("#mensagens_dados_atendimento").addClass("aviso");
$("#mensagens_dados_atendimento").text("Preencha todos os campos corretamente!");
$(".mensagens_dados_atendimento").fadeIn("fast");
}else if(resposta == 1){
$("#mensagens_dados_atendimento").attr("class","");
$("#mensagens_dados_atendimento").addClass("erro");
$("#mensagens_dados_atendimento").text("Erro ao iniciar atendimento, tente novamente!");
$(".mensagens_dados_atendimento").fadeIn("fast");
}else if(resposta == 2){
$("#mensagens_dados_atendimento").attr("class","");
$("#mensagens_dados_atendimento").addClass("sucesso");
$("#mensagens_dados_atendimento").text("Iniciando atendimento...");
$(".mensagens_dados_atendimento").fadeIn("fast");
window.setTimeout(function(){
form.fadeOut("fast");
$("#barra_verde p").html("Estamos contactando um atendente, por favor aguarde...");
$("#carregando_chat").fadeIn("fast");
function verificaAtendente(){
$.ajax({
type: "POST",
url: "crud.php",
data: { acao: 'verifica_atendente' },
success: function ( resposta ){
if(resposta == 'erro'){
form.fadeIn("fast");
$("#barra_verde p").html("Preencha seus dados para iniciar o atendimento.");
$("#carregando_chat").fadeOut("fast");
$("#mensagens_dados_atendimento").attr("class","");
$("#mensagens_dados_atendimento").addClass("erro");
$("#mensagens_dados_atendimento").text("Erro ao iniciar atendimento, tente novamente!");
$(".mensagens_dados_atendimento").fadeIn("fast");
}else if(resposta == 0){
}else if(resposta != 'erro' && resposta != 0){
var result = resposta.split("&");
var nomeAtendente = result[0];
var dataInicio = result[1];
var horaInicio = result[2];
$("#barra_verde p").html("Você está online atualmente com <b>"+nomeAtendente+"</b>.");
$("#atendimento_iniciado p").html("Atendimento iniciado em <b>"+dataInicio+"</b> às <b>"+horaInicio+"</b>.");
$("#carregando_chat").fadeOut("fast");
$("#chat_online").fadeIn(500);
clearInterval(verifica_atendente);
}
}
});
}
var verifica_atendente = setInterval(function(){verifica_style_chat()}, 1000);
var verifica_atendente = setInterval(function(){verificaAtendente()}, 1000);
}, 2000);
}
}
});
}
function verifica_style_chat(){
var chat = $("#chat_online").attr("style");
if(chat == 'display:none'){
}else if(chat == ''){
atualiza_chat();
}
}
function atualiza_chat(){
window.setInterval(function(){
$.ajax({
type: "POST",
url: "crud.php",
data: { acao: 'atualiza_chat' },
success: function ( resposta ){
if (resposta != ultima_resposta){
$("#chat").html(resposta);
var chatScroll = $('#chat_scroll').height();
$('#chat_scroll').scrollTop(chatScroll);
ultima_resposta = resposta;
var audio = new Audio('img/alerta.mp3');
audio.play();
}
}
});
}, 500);
};
function envia_mensagem(){
var form = $('#escrever_mensagem');
form.submit(function(){
return false;
});
form.ajaxSubmit({
url:"crud.php",
data: {acao: "enviar_mensagem"},
success: function ( resposta ){
if(resposta == 'erro'){
}else if(resposta == 'sucesso'){
$("#mensagem").val('');
$("#mensagem").blur();
}
}
});
}
</script>
Quem tiver uma dica ou algo que posso melhorar, ficarei grato.
Obrigado!
Sim.. Mysql
Você pode me passar seu e-mail pra gente contra algumas informações?Estou fazendo um projeto parecido com seu.
Abraços
Adicione meu skype:
ou
@Andrew,
No success do ajax do inicia_chat você faz isso aqui:
var verifica_atendente = setInterval(function () {
verifica_style_chat()
}, 1000);
Quer como você sabe, vai chamar a verifica_style_chat a cada 1000ms.
Dento da verifica_style_chat você chama a atualiza_chat que usa um setInterval pra fazer um request ajax a cada 500ms.
Eu sei que tem um IF dentro da verifica_style_chat, mas se a atualiza_chat for chamada mais de uma vez, você inicia outro setInterval.
atualiza_chat chamada 1x: 2 requests ajax (dentro do atualiza_chat) por segundo.
atualiza_chat chamada 2x: 4 requests ajax por segundo.
...
...
30 segundos depois, atualiza_chat chamada 30x; 60 requests ajax por segundo.
Tem que ver isso ae.
OUTRA COISA: não recomendo que o atuallza_chat use setInterval. É melhor você chamá-lo apenas uma vez, e DENTRO dele (no success/complete) ele se chama novamente. Assim caso a rede dê lag os requests não se atropelam.
Obrigado por responder Fiote...
Fiz as alterações só que continua meio que "travando"...
Você tem um contato? Skype, etc? Pode passar? Fico no aguardo...
Faz assim: coloque um console.log('nome_da_funcao') dentro de cada função dessa, e acompanhe seu log pra ver se alguma delas está sendo chamada muito mais do que o esperado. Com esse monte de setTimeout / interval que vocÊ tá usando dá pra se perder haha.
Poisé, exagerei demais nas funções de tempo...
Mesmo assim, pode passar seu contato?
Quem sabe contratemos um freela... Obg!
Te mandei PM.
E ai Andrew blz ?
Vc esta utilizando BD?