Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ AJAX _ Skrypt wykorzystujący ajax php i js oraz element canvas nie działa

Napisany przez: InfinityDimension 16.04.2017, 17:18:06

Aby przetestować ajax współpracujący z rysowaniem po canvas za pomocą js napisałem prosty programik
i działa na płatnym serwerze a u mnie nie chce działać na apache2
podaje kod:

  1. <http://december.com/html/4/element/html.html>
  2. <http://december.com/html/4/element/head.html>
  3. <http://december.com/html/4/element/title.html>tesciczek</http://december.com/html/4/element/title.html>
  4. </http://december.com/html/4/element/head.html>
  5. <http://december.com/html/4/element/body.html>
  6. <canvas style="background:#F0F0F0" id="krzyzyki" width="150" height="150" />
  7. <http://december.com/html/4/element/script.html>
  8. var tab = [[0,0,0],[0,0,0],[0,0,0]];
  9.  
  10. var X=0;
  11. var Y=0;
  12. //var tabt = new Array();
  13. var zmiana=0;
  14. var bok =40;
  15. var ctx=document.getElementById("krzyzyki").getContext('2d');
  16. function rysujKrzysz(x,y)
  17. {
  18. //ExtendFirefoxEvent(e);
  19. ctx.beginPath();
  20. ctx.strokeStyle= "rgb(0,0,0)";
  21. ctx.moveTo(bok*x, bok*y);
  22.  
  23. ctx.lineTo(bok*x+bok,bok*y+bok);
  24. ctx.stroke();
  25. ctx.moveTo(bok*x, bok*y+bok);
  26.  
  27. ctx.lineTo(bok*x+bok,bok*y);
  28. ctx.stroke();
  29. ctx.closePath();
  30. }
  31. function marz(x,y)
  32. {
  33. // ctx.rect(x*bok,y*bok,bok,bok);
  34. ctx.beginPath();
  35. ctx.fillStyle = "rgb(255,255,255)";
  36. ctx.fillRect(x*bok,y*bok,bok,bok);
  37. ctx.fill();
  38. ctx.closePath();
  39. }
  40. function czysc()
  41. {
  42. ctx.fillStyle = "#00FF00";
  43. ctx.fillRect(0,0,150,150);
  44. ctx.fill();
  45. }
  46. var zablokuj=false;
  47. xmlhttp=new XMLHttpRequest();
  48. function odebrane()
  49. {
  50. zablokuj=true;
  51. if (xmlhttp.readyState==4 && xmlhttp.status==200) {
  52. var con=xmlhttp.responseText;
  53. // alert(con);
  54. var temp=con.split(" ");
  55. var m=0;
  56.  
  57. for(var i =0 ;i<3;i++)
  58. {
  59. for(var j=0;j<3;j++)
  60. {
  61. tab[i][j]=parseInt(temp[m]);
  62.  
  63. m++;
  64. }
  65. }
  66. m=0;
  67. zablokuj=false;
  68. }
  69. //zablokuj=false;
  70. }
  71. xmlhttp.onreadystatechange=odebrane;
  72. function process()
  73. {
  74. rysujKrzysz(0,0);
  75. marz(0,0);
  76. if(!zablokuj){
  77. czysc();
  78. for(var i=0;i<3;i++)
  79. for(var j=0;j<3;j++)
  80. {
  81. if(tab[i][j]){
  82. rysujKrzysz(j,i);
  83. }else{
  84. marz(j,i);
  85. }
  86. }
  87. }
  88. zablokuj=true;
  89. xmlhttp.open("GET","s2.php?czy=0"+"&X="+X.toString()+"&Y="+Y.toString(),true);
  90. xmlhttp.send(null);
  91. zmiana=0;
  92.  
  93. setTimeout("process()",500);
  94. }
  95. function nacmysz(e)
  96. {
  97. zablokuj=true;
  98. X=Math.floor(e.layerX/bok);
  99. Y=Math.floor(e.layerY/bok);
  100. zmiana=1;
  101. xmlhttp.open("GET","s2.php?czy=1"+"&X="+X.toString()+"&Y="+Y.toString(),true);
  102. xmlhttp.send(null);
  103.  
  104. }
  105. krzyzyki.addEventListener("mousedown", nacmysz, false);
  106. process();
  107.  
  108. </http://december.com/html/4/element/script.html>
  109. </http://december.com/html/4/element/body.html>
  110. </http://december.com/html/4/element/html.html>

i skrypt s2.php
  1. <?php
  2. $czy = $_REQUEST['czy'];
  3. $X = $_REQUEST['X'];
  4. $Y = $_REQUEST['Y'];
  5. http://www.php.net/settype($X, 'integer');
  6. http://www.php.net/settype($Y, 'integer');
  7. $filename = "tablicunia.txt";
  8. $content = http://www.php.net/file($filename);
  9. $array = http://www.php.net/explode(" ", $content[0]);
  10. $krzyzyki = $content[0];
  11. if((int)$czy)
  12. {
  13. if((int)($array[$Y*3+$X]))$array[$Y*3+$X]='0';
  14. else
  15. $array[$Y*3+$X]='1';
  16.  
  17. $krzyzyki = http://www.php.net/implode(" ", $array);
  18. $fp = http://www.php.net/fopen($filename,"w");
  19. http://www.php.net/fputs($fp,$krzyzyki);
  20. http://www.php.net/fclose($fp);
  21. }
  22.  
  23. ?>
  24. <?php http://www.php.net/echo($krzyzyki);
  25. //echo($czy);
  26. //echo($X);
  27. //echo($Y);
  28. ?>

i na płatnym serwerze wszystko w miarę działa można klikać i krzyżyki pokazują się lub znikają a wszyscy użytkownicy widzą zmiany
swoje i innych natomiast na moim localhoście z apache2 jeśli kliknę to zaraz samo się zmienia
ja ogólnie jestem zielony jeśli chodzi o webowe umiejętności prosiłbym Was którzy się lepiej znacie o pomoc i może jeszcze
o wytłumaczenie dlaczego tak jak ja napisałem nie działa prawidłowo z góry dziękuje

Już doszedłem co trzeba zrobić.
Trzeba napisać w konsoli:
sudo chmod a+w /var/www/html/tablicunia.txt
okazuje się że apache2 nie był uruchomiony przez użytkownika mającego uprawnienia do zapisu w plikach w tym katalogu stąd ten problem.
przepraszam za kłopot.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)