none
WebcamJS - Função JS não funciona às vezes RRS feed

  • Pergunta

  • Tenho essa função javascriptt, que é quando tira a foto da webcam, ela funciona, mas tem horas que a parte "webcam.snap()" não funciona. Não entendo porque, tem horas que ele funciona, e tem horas que não, ele não retorna nenhum erro no console. OBS: Sempre que eu coloco o breakpoint no webcam.snap() funciona.

    Utilizei este link como referência.

    Segue a parte do código :

    function take_snapshot() {
      document.getElementById('upload_results').innerHTML = '<h1>Realizando Upload da Foto...</h1>';
      webcam.snap();
      document.getElementById('<%=btnFechaPopWebCam.ClientID%>').click();
    }

    Tanto que ele chega a realizar o click do FechaPopWebCam, mas nem sempre ele realiza a função do webcam.snap(); E aqui é onde eu chamo a função take_snapshot()

    <input type="button" value="Capturar" class="btn btn-default" onclick="take_snapshot();" />

    quarta-feira, 7 de fevereiro de 2018 13:07

Respostas

  • Mariana, normalmente problemas assim acontecem por implementar um código assíncrono como síncrono, ou seja, logo após disparar um processo assíncrono ($.ajax(), por exemplo) você já tenta acessar um valor que só será alterado após o processamento assíncrono ser concluído. Daí quando inclui um breakpoint, o "atraso" gerado pela parada permite que o processo assíncrono conclua e então o código funcione normalmente.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta Mariana C. Costa quinta-feira, 8 de fevereiro de 2018 17:07
    quinta-feira, 8 de fevereiro de 2018 13:46

Todas as Respostas

  • Na verdade o problema está no formulário de Upload, onde eu passo a variável para a sessão, ele não está chegando no formulário, estou depurando e isso não está acontecendo, não sei o porque, já criei um novo formulário fora da página master pra ver se não era um problema com ela, e o mesmo erro acontece, ele não chega a entrar.

    Estou passando a variável dessa forma:

    webcam.set_api_url('Upload.aspx');

    quinta-feira, 8 de fevereiro de 2018 11:08
  • Mariana, não entendi muito bem. Você fala em passar a variável para a sessão, mas colocou um código (aparentemente) em JavaScript.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 8 de fevereiro de 2018 12:36
  • Juliano se eu coloco breakpoint na função javascript no html ele funciona, se eu tiro o breakpoint ele não funciona, é como se não passasse a variável da url Upload, que é recebido a foto da webcam. 
    quinta-feira, 8 de fevereiro de 2018 13:38
  • Mariana, normalmente problemas assim acontecem por implementar um código assíncrono como síncrono, ou seja, logo após disparar um processo assíncrono ($.ajax(), por exemplo) você já tenta acessar um valor que só será alterado após o processamento assíncrono ser concluído. Daí quando inclui um breakpoint, o "atraso" gerado pela parada permite que o processo assíncrono conclua e então o código funcione normalmente.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta Mariana C. Costa quinta-feira, 8 de fevereiro de 2018 17:07
    quinta-feira, 8 de fevereiro de 2018 13:46
  • Juliano no caso o webcam.snap() que faz o evento, no caso então ele não esperaria para logo em seguida fazer o click do button? Porque ele não espera, ele passa por ele e faz o click. 
    quinta-feira, 8 de fevereiro de 2018 13:57
  • Se você olhar um exemplo na documentação do WebcamJS verá que o snap() aceita um callback (um método que será chamado após a execução do snap):

    function take_snapshot() {
    			Webcam.snap( function(data_uri) { // callback
    				// document.getElementById('my_result').innerHTML = '<img src="'+data_uri+'"/>';
    			} );
    		}
    

    Faça um teste desta forma, colocando seu código do click dentro do callback.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 8 de fevereiro de 2018 14:06
  • Juliano eu não fiz dessa forma que você falou, o problema estava no click do button logo em seguida, na verdade fui entender mais sobre processos assíncronos, esclareceu super bem, e funcionou certo. Não tinha muito conhecimento sobre o assunto, ajudou bastante, obrigado mais uma vez.
    quinta-feira, 8 de fevereiro de 2018 17:07
  • Show de bola, Mariana. 

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 8 de fevereiro de 2018 17:18