Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]<audio> - zliczanie odtworzenia
Forum PHP.pl > Forum > Przedszkole
bahh
Witam, wykorzystuje znacznik HTML5 <audio> w następujący sposób:
  1. <audio controls>
  2. <source src="muza.mp3" type="audio/mpeg">
  3. Twoja przeglądarka nie obsługuje odtwarzacza
  4. </audio>


Chcę zliczać każde odtworzenie (przyciśnięcie play - bez przypadku pauzy). Jest to możliwe przy użyciu JavaScript i Ajaxa? Nie wiem czy da się taki efekt uzyskać, dlatego piszę do was. Jak bym miał zliczyć takie odtworzenie?
trueblue
Zliczaj po stronie serwera.
bahh
No dobrze, moge w ten sposob okreslic ile razy plik zostal pobrany do odtwarzacza ale nie okresle kto dokladnie i kiedy to wlaczyl. Jak mialbym to zrobic?
trueblue
Nie do końca, bo:
<audio controls preload="none">

Albo:
https://developer.mozilla.org/en-US/docs/We...ts/Media_events
bahh
Drugi link to rozwiązanie działające na Mozilli, z resztą przeglądarek nic nie wiadomo.

Prosto mówiąc - użytkownik po zalogowaniu ma jakieś id w zmiennej PHP ($user->id) gdzie jeśli kliknie PLAY na odtwarzaczu to ma zliczyć to działanie i zapisać do bazy danych (w tym przypadku będzie potrzebny Ajax) - czyli jeśli dana akcja będzie to żeby wysłało żądanie Ajaxem do pliku zlicz.php?idusera=21

To przykładowy skrypt Ajaxa jakiego użyję - na dole jest wywołanie. Jak więc skutecznie zrobić warunek do wywołania (if) żeby na każdej przeglądarce przeszło to zliczenie jeśli ktoś odtworzy ten plik?
[JAVASCRIPT] pobierz, plaintext
  1. function ajax( options ) {
  2. options = {
  3. type: options.type || "POST",
  4. url: options.url || "",
  5. onComplete: options.onComplete || function(){},
  6. onError: options.onError || function(){},
  7. onSuccess: options.onSuccess || function(){},
  8. dataType: options.dataType || "text"
  9. };
  10.  
  11. var xml = new XMLHttpRequest();
  12. xml.open(options.type, options.url, true);
  13.  
  14. xml.onreadystatechange = function(){
  15. if ( xml.readyState == 4) {
  16. if ( httpSuccess( xml ) ) {
  17. var returnData = (options.dataType=="xml")? xml.responseXML : xml.responseText
  18. options.onSuccess( returnData );
  19. } else {
  20. options.onError();
  21. }
  22. options.onComplete();
  23. xml = null;
  24. }
  25. };
  26.  
  27. xml.send();
  28.  
  29. function httpSuccess(r) {
  30. try {
  31. return ( r.status >= 200 && r.status < 300 || r.status == 304 || navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined")
  32. } catch(e) {
  33. return false;
  34. }
  35. }
  36. }
  37.  
  38. ajax( {
  39. type: "GET",
  40. url: "zlicz.php?idusera=21",
  41. onError: function(msg) {
  42. console.warn(msg)
  43. },
  44. onSuccess: function(msg) {
  45. console.log(msg);
  46. }
  47. });
[JAVASCRIPT] pobierz, plaintext



trueblue
http://www.w3schools.com/tags/av_event_playing.asp

Możesz też ukryć standardowe kontrolki i utworzyć własny przycisk play i tam wywoływać ajax.
bahh
Dokładnie o to mi chodziło, dzięki trueblue
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.