Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala Galera !
Vou pedi ajuda a vcs, eu já posteis esta duvida no tópico de javascript mas o pessoal lá ta meio devagar, como eu sei que todo programador php assim como eu tem que saber um pouco de tudo, acho que vcs poderão me ajudar.
Estou com uma aplicação para um chat, e o problema é o seguinte:
Tenho uma pagina que faz um verificação no BD para ver se chegou novas mensagens se for o ATENDENTE
ela executa uma ação para toca um bip é até ai esta funcionando beleza, o problema começa e que o bip toca direto sem parar
eu quero que ele toca no máximo 2 vezes. Esta pagina chama-se som.php e ela passa por uma outra pagina que faz a atualização
da mesma em AJAX, esta pagina se chama chat_refresh.php
Vou posta o código para vcs me ajudarem nessa questão, caso alguém conheça alguma função em javascrpt
para controlar isso melhor ficarei muito grato se poderem me ajudar.
som.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html"; charset= "ISO-8859-1">
<script language="JavaScript" src="js/protege.js"></script>
</head>
<body >
<?php
$host = "xxxxxxxxx";
$user = "xxxxx";
$password= "xxxxxxx";
$banco= "xxxxxx";
$db_conexao = mssql_connect("$host","$user","$password");
mssql_select_db($banco);
$sql = "select * from mensagem order by id_mensagem desc ";
$res = mssql_query($sql, $db_conexao);
$quemenviou = mssql_result($res,0,"quemenviou");
echo "$quemenviou";
if ($quemenviou=="ATENDENTE")
{
echo "<html>
<html>
<head>
</head>
<body>
<embed height='5' width='5' src='som/button-09.mp3'>
</body>
</html>
";
}
?>
</body>
</html>
Chat_refresh.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html"; charset= "ISO-8859-1">
<title>Chat_refresh</title>
<link rel="stylesheet" type="text/css" href="css/refresh.css"/>
<script language="JavaScript" src="js/protege.js"></script>
</head>
<script type="text/javascript">
function Ajax(){
var xmlHttp;xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
}xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
}xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}alert("No AJAX!?");
return false;
}
}
}
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById('ReloadThis').innerHTML=xmlHttp.responseText;
setTimeout('Ajax()',10000);
}
}
xmlHttp.open("POST","som.php",true); // aqui configuramos o arquivo
xmlHttp.send(null);
}
</script>
<body>
<div id="tudo">
<div id="bottons">
<ul><input id ="salvar" type='image' src='imagens/icons/save16.png' id="submit_form" class="button"/></ul>
<ul><input type='image' src='imagens/icons/print.png' onclick='printFrame2()'></ul>
<ul><input id="sair" type='image' src='imagens/icons/sair.png' onclick=" location. href= 'logoff.php' "></ul>
</div>
<div id="ReloadThis" ></div>
</div>
</body>
</html>
Desde já agradeço.
Ninguém? É isso é difícil mesmo né! :pinch:
Se fosse fácil a tanto de gente já teria respondido!
Se você nota no meu código verás que já estou usando o <embed>, mas mesmo assim obrigado pela dica.
Abraços
Pessoal eu estava precisando de uma função que fizeste o áudio toca apenas uma vezes.
e o loop="1" que eu falei? no seu código não tem ele.
Então no AJAX ele não funciona, por que toda a vez que a pagina é carregada ele toca. Eu precisava de algo que mesmo a pagina sendo carregada e não toca-se.Ou melhor toca-se apenas uma vez.
mas ele não precisa ficar no script ajax, pode ficar na parte html a menos que tem outra coisa que interfere nisso
mas ele não precisa ficar no script ajax, pode ficar na parte html a menos que tem outra coisa que interfere nisso
Sim precisa por que o AJAX e o que verifica se chegou mensagem novas no banco de dados, por exemplo:
De 5 em 5 segundo o AJAX vai no banco e verifica e chegou mensagem, se for do atendente ele executa o áudio,
se não ele não faz nada! Até ai beleza né !
O que acontece se o atendente manda mensagem a cada 5 segundo e toca o áudio, eu não quero isso, quero que ele toca uma vez só, eu poderia aumenta o tempo de verificação, por exemplo coloca a cada 1 minuto vamos falar assim, mas ai pode ter um atraso na execução do áudio, por que as vezes o ATENDENTE manda a mensagem e o áudio só vai ser executado 1 min depois. Isso tem que ser imediato ou seja o ATENDENTE mando a mensagem o áudio é executado
Eu ainda tenho que coloca uma função para desabilitar o áudio caso seja da vontade do cliente!
mas o ajax pode escrever o html para isso. no js ia ser algo assim
if(nova > existentes){
existentes = nova;
document.write("<embed height='5' width='5' src='som/button-09.mp3' loop='1'>");
}
no caso a variavel existente guarda o numero de mensagem e a nova retorna o numero do banco de dados e o if compara os dois para ver se nova é maior que a existente o que indica que tem nova mensagem. veja se consegue usar a logica no ajax
ou pode tentar no ajax mesmo loop=False.
>
mas o ajax pode escrever o html para isso. no js ia ser algo assim
if(nova > existentes){
existentes = nova;
document.write("<embed height='5' width='5' src='som/button-09.mp3' loop='1'>");
}
no caso a variavel existente guarda o numero de mensagem e a nova retorna o numero do banco de dados e o if compara os dois para ver se nova é maior que a existente o que indica que tem nova mensagem. veja se consegue usar a logica no ajax
Entendi sua lógica, mas o AJAX é o que vai no banco verifica se tem a mensagem, se tivesse outro método para fazer esse verificação sem o ajax ai sim, mas tem que usar alguma coisa que vai no banco a cada segundo.
eu não tenho experiencia com ajax mas se tem jeito de colocar som deve ter uma função loop para dizer quantas vezes executar. pesquise por isso loop som ajax deve ter alguma coisa. ou então um esquema possivel pode ser um iframe carregando uma página php que pode ser atualizada de 5 em 5 segundos e um js jogando a quantidade em um hidden na pagina principal. na pagina principal um outro hidden para guardar a quantidade e comparar com a primeira. esse iframe tambem pode ficar oculto com um overflow: hidden em um style mas isso é gambi e pode interferir na performance. melhor mesmo achar um jeito de botar o loop no som no ajax
ja tentou usar o velho html <embed> colocando loop="1"? no html 5 tem a tag audio mas talvez por enquanto seja melhor usar o embed antigo por causa de compatilidade.