Pentru a
apela o functie Ajax cand pagina e inchisa, aplicati evenimentul
beforeunload
la obiectul "window", care sa apeleze functia ajax cand evenimentul este emis.
- Cererea ajax trebuie facuta in mod sincron (synchronous).
<script>
// sends data to a php file, via POST, when page is closed
function pageClosed() {
var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); // XMLHttpRequest object
var data ='name=val'; //data with name and value to send to your_script.php
request.open('post', 'your_script.php', false); //false - to make synchronous request
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(data); //sends data
console.log(data); //for debug to see if code is executed
return true;
}
//register event emited when page is closed, it calls the pageClosed() function
window.addEventListener('beforeunload', pageClosed);
</script>
- In scriptul php apelat de Ajax se adauga functia
ignore_user_abort(true);
. Permite rularea scriptului php si dupa ce fereastra browser-ului este inchisa.
Inregistrare timp petrecut de utilizatori pe site
Iata o aplicatie practica a codului dat mai sus.
Urmatorul script inregistreaza intr-un fisier pe server
timpul petrecut de utilizatori pe site (in format json). Aici se inregistreaza utilizatorul dupa IP.
1. Adaugati urmatorul script ajax in paginile din site:
<script>
var start_time = Math.floor(Date.now() /1000);
// sends to php the number of seconds the user spend on time
function pageClosed() {
var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); // XMLHttpRequest object
var data ='tms='+(Math.floor(Date.now() /1000) - start_time); //data to send to reg_time.php
request.open('post', 'reg_time.php', false); //false - to make synchronous request
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(data); //sends data
console.log(data); //for debug to see if code is executed
return true;
}
//register event emited when page is closed, it calls the pageClosed() function
window.addEventListener('beforeunload', pageClosed);
</script>
2. Adaugati urmatorul cod intr-un fisier php: "reg_time.php".
<?php
ignore_user_abort(true);
if(isset($_POST['tms'])){
$tms = intval($_POST['tms']);
$user = $_SERVER['REMOTE_ADDR']; //here we use the ip
$file ='reg_time.json';
$f_data =[];
//add the $user and $tms in json format in $file
if(!file_exists($file)){
$f_data[$user] = $tms;
} else {
$f_data = json_decode(file_get_contents($file), true);
if(isset($f_data[$user])) $f_data[$user] = $f_data[$user]+ $tms;
else $f_data[$user] = $tms;
}
file_put_contents($file, json_encode($f_data));
}
3. Urmatorul cod php poate fi utilizat pentru a citi si afisa datele inregistrate in "reg_time.json":
<?php
$file ='reg_time.json';
$f_data =[];
if(file_exists($file)) $f_data = json_decode(file_get_contents($file), true);
foreach($f_data as $k=>$v){
echo '<br>'. $k.' = '.$v.' seconds';
}
Un Test simplu in fiecare zi
HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag este element de tip bloc?
<div> <img> <span><div>Web Programming and Development</div>
Care cod CSS afiseaza textul subliniat?
font-style: italic; text-decoration: underline; font-weight: 500;h2 {
text-decoration: underline;
}
Clic pe functia JavaScript care apeleaza o alta functie dupa un anumit timp.
insertBefore() setTimeout() querySelector()function someFunction() { alert("CoursesWeb.net"); }
setTimeout("someFunction()", 2000);
Clic pe instructiunea care returneaza numarul total de elemente dintr-un array asociativ.
count($array) count($array, 1) strlen()$food =["fruits" =>["banana", "mar"), "veggie" =>["ceapa", "rosie"));
$nr_food = count($food, 1);
echo $nr_food; // 6
Indicati Viitorul Perfect la negativ al verbului din paranteze, in propozitia: "The child (to not play) by Sunday".
has't played haven't been playing will haven't playedThe child will haven't played by Sunday.
- Copilul nu s-ar fi jucat pana duminica.
Indicati Viitorul Perfect pentru verbul "contar" (a povesti) la forma "Él".
habrá contado va a contar contabaÉl no habrá contado el cuento.
- El nu ar fi spus povestea.