Bonjour
j'essai de monter un script de compte a rebourg avec de l'ajax
le principe un compte a rebourg de 2mn, qui peut être relancé à 2mn en cliquant sur un bouton (et mise à jour d'une donnée dans la bdd) verification a chaque seconde qu'une donnée précise n'est pas été mise à jour, si nouvelle donnée alors on repard à 2mn...
mes premiers tests fonctionnent sous FF et opéra (sous MAC) mais sous safari, ça me génère une erreur au bout de quelques secondes (non régulier, 5scd ou 15scd...), puis une autre et ça bloque safari, enfin ça le ralentit grave avec cumul d'erreurs
Code de la page 1 :
<html>
<body>
<script>
function writediv(texte, oldbid)
{
document.getElementById('test').innerHTML = texte;
document.getElementById('test').style.backgroundColor = "#fff";
document.getElementById('time').style.backgroundColor = "#fff";
if(texte > oldbid)
{
document.getElementById('test').style.backgroundColor = "#ff0";
document.getElementById('time').style.backgroundColor = "#ff0";
var newcible = new Date();
var newtime = parseInt((newcible.getTime() / 1000)+120, 10);
document.getElementById('debut').value = newtime;
}
document.getElementById('oldbid').value = texte;
}
function fnInterval()
{
var oldbid = document.getElementById('oldbid').value;
if(texte = file('requete.php?id=1&oldbid='+oldbid))
{
writediv(texte, oldbid);
}
else
{
var texte = "rien";
document.getElementById('test').innerHTML = texte;
}
}
function post(texte)
{
document.getElementById('bestbid').value = texte;
}
function addpost(user, bestbid)
{
if(texte = file('requete.php?post='+user+"&bestbid="+bestbid))
{
post(texte);
}
}
function file(fichier)
{
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) return(xhr_object.responseText);
else return(false);
}
setInterval(fnInterval, 1000);
</script>
<div id="test" style="width:30px">--,--</div>
<form method="post" action="">
Old bid :<input type="text" name="oldbid" id="oldbid"><br>
Best bid :<input type="text" name="bestbid" id="bestbid"><br>
User :<input type="text" name="user" id="user">
<input type="button" value="Post" onClick="addpost(user.value, bestbid.value)">
</form>
<bR />
//------------------------
<br>
<input type="text" id="debut">
<script>
var cible = new Date();
var time = parseInt((cible.getTime() / 1000)+120, 10);
function debut()
{
document.getElementById('debut').value = time;
}
debut();
function decompte()
{
var aujourdhui = new Date();
time_tmp = parseInt(aujourdhui.getTime() / 1000, 10);
time_debut = document.getElementById('debut').value;
restant = time_debut - time_tmp;
jour = parseInt((restant / (60 * 60 * 24)), 10);
heure = parseInt((restant / (60 * 60) - jour * 24), 10);
minute = parseInt((restant / 60 - jour * 24 * 60 - heure * 60), 10);
seconde = parseInt((restant - jour * 24 * 60 * 60 - heure * 60 * 60 - minute * 60), 10);
if(seconde<10) { var seconde = '0'+seconde; }
if(minute <1 && seconde <= 15)
{
document.getElementById('time').style.color = "#FF0000";
}
document.getElementById('time').innerHTML = '0'+minute+' m '+seconde+' s ';
if (time_tmp < time_debut)
{
setTimeout('decompte();', 1000);
}
else
{
// Temps fini, on fait ce qu'on veux
document.getElementById('time').innerHTML = "Enchere terminee";
}
}
setTimeout('decompte();', 1000);
</script>
<div id="time">--:--</div>
</body>
</html>
Code de la page php (pour info et c'est des tests...)
<?php
if(isset($_GET['id'])) $id=$_GET['id'];
else $id="";
if(isset($_GET['post'])) $post=$_GET['post'];
else $post="";
if(isset($_GET['bestbid'])) $bestbid=$_GET['bestbid'];
else $bestbid="";
if(isset($_GET['oldbid'])) $oldbid=$_GET['oldbid'];
else $oldbid="";
$link = mysql_connect ($serveur,$user,$password) or die ('Erreur : '.mysql_error() );
mysql_select_db($base) or die ('Erreur :'.mysql_error());
//********************
if($post)
{
$bid = 0.01;
$sql = "UPDATE post SET montant=montant+'$bid', user='$post' where id='1'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$sql = "SELECT * FROM post where id='1'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo $data['montant'];
}
}
//********************
$sql = "SELECT * FROM post where id='$id'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo $data['montant'];
}
?>
Voilà, quelqu'un voit il un truc qui pourrait déplaire à safari ...???
Laubro