XMLHttpRequest probleme

hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007 - 10 mai 2006 à 04:47
hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007 - 10 mai 2006 à 22:34
Limaiem heykel
Bonjour, j'ai un page php qui contient un tableau remplis depuis une base de donnees. Ma base et rempli a partir d'un programme en java qui ajoute des enregistrement dans ma base a temps variables. Donc je voudrait cree un ecouteur sur ma base de donnees qui me permet de rafraichir ma base quand des nouveaux enregistrement s y ajoutent, pour enfin rafraichir ma page web et de la les nouveau enregistrement seront visualiser.
Je suis encore debutant dans XMLHTTP request j'ai dut utiliser un code depuis le forum phpcs.com mais ca marche pas .
Voici ainsi le code de ma page php et ensuite le code de ma page ecouteur.php:

Page start,php qui afficher les donnees d'une requete dans un tableau

<?// ici les variables de session permettant la transmition des donnees
session_start();
$heykel = "";
$heykel = "".$_SESSION['query'];
echo $heykel;
$great = 0;
mysql_connect("localhost","root","");
mysql_select_db("car");

$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");
$mx = mysql_fetch_array($x);

$_SESSION['maxim'] = "";
$_SESSION['maxim'] = $mx['heykel'];

$rtc = "";
$rtc = $_SESSION['heykel1'];


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
body {
background-color: #DFDCE4;
}
.Style1 {
font-size: 18px;
font-weight: bold;
}
.Style2 {font-size: 24px}
.Style4 {font-size: 24px; font-weight: bold; }
-->
</style></head>

// le srcipt xmlhttpRequest

<script language ="javascript">
xhr_url = 'admin/ecouteur.php';
old_xhr_response = '<? echo $_SESSION['maxim']; ?>';// Le maximu afficher dans la page pour permettre la comparaison si nouveau //enregistrement
// puisque mais donnees son indexer par ordre
function SendGetRequest() {
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
// On ouvre la requete vers la page désirée
xhr_object.open( 'GET', xhr_url, true );
// On lui donne le pointeur de fonction de retour
xhr_object.onreadystatechange = CallBackRequest;
// On envoi la requete
xhr_object.send( null );
}

function CallBackRequest() {
// Sur le retour de la requete, on teste son état
if ( xhr_object.readyState == 4 ) {

//il faut maintenant connaître la valeur de la dernière entrée de ta base de donnée :
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
document.getElementById('<? echo $rtc; ?>').innerHTML = xhr_object.ResponseText;
[javascript:location.reload() ]// cette fonction permet le reload de la page si nouveau enregistrement (y a t il des fautes ds mon code????????)
}
}
}
SetInterval("SendGetRequest()",2000)

</script>
...// ici le tableau d'affichage depuis la base de donnees qui contient tous les variables
&nbsp;Description,
Price,
Model,
Miletall,

&nbsp;Energie,
Phone,
Liens,

<?
mysql_connect(\"localhost\",\"root\",\"\");
mysql_select_db(\"car\");

$xd = $_GET['page'];
if ($xd==1){
$xxl = 0;
}
else {
$xxl = ($_GET['page'] - 1) * $nbParPage;
//$xxl -=1;
}

$requete=mysql_query($heykel.\" LIMIT $xxl,$nbParPage\");
while($requ = mysql_fetch_array($requete)){

?>
----

&nbsp;<? echo $requ['descar1']; ?>,
<? echo $requ['prix']; ?>,
<? echo $requ['model']; ?>,
<? echo $requ['kms']; echo "-"; echo $requ['kms1'];?>,

<? echo $requ['energie']; ?>,
<? echo $requ['srcimg']; ?>,
<? echo $requ['index1']; ?>,

<?
}
mysql_close();
?>

Maintenant le code sources de la page ecouteur qui recherche le plus grand element de la base et le renvoit au script

<?
header('Content-type: text/html; charset=iso-8859-1');
session_start();

mysql_connect("localhost","root","");
mysql_select_db("car");

$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");
$mx = mysql_fetch_array($x);
$_SESSION['heykel1'] = $mx['heykel'];
echo $_SESSION['heykel1'];// pour envoyer la variable
?>

Merci enorment si vous pouvez m'aider a corriger ce code (je suis encore debutant en javascript)
A propos de documentation est ce que vous pouvez me fournir des liens contenant des cours ou des documentations sur ajax et xmlhttprequest.
Merci bq

6 réponses

atlante34 Messages postés 14 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 24 janvier 2012
10 mai 2006 à 10:34
salut,

Voici une URL pour voir et comprendre ce qu'est AJAX et XMLHTTPREQUEST :
http://siddh.developpez.com/articles/ajax/

Sinon, pour ton script, la variable xhr_object n'est pas defini au debut :
var xhr_object = null; // il faut le mettre car apres tu l'utilises dans une autre fonction "CallBackRequest()" et lui il ne connait pas xhr_object.

Il faut definir xhr_object comme étant une variable globale.
Au debut de la fonction SendGetRequest(), avant le if, met :
var xhr_object = null;

J'espere que ca passera, sinon je vois pas d'erreur,
A bon entendeur
Atlante34
0
hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007
10 mai 2006 à 14:09
Bonjour, merci pour votre aide mais ca ne marche pas , j'ai
effectuer tous les changement que vous m'avez indiquer mais pas encore
il y a un probleme que j'ai pas su le localiser.

Je croit je vait m'expliquer : Vous m'avez indiquer d'utiliser une
page ecouteur qui permet d'emettre la nouvele variable saisie depuis ma
base de donnees pour la comparer dans ma page principale

avec le dernier index existant. Donc d'apres ce que j'ai lu il y 3 type de passage de valeurs : POST, GET ,HEADER ....

Je voudrait savoir s'il y un pb a ce niveau peut etre. Aussi je ne veux
rien afficher dans ma page je veux seulement la rafraichir completement
si un nouveu enregistrement me serai envoyer par la page ecouteur .

VOici mon code :

page start.php

<?

session_start();

$heykel = "";

$heykel = "".$_SESSION['query'];

echo $heykel;

$great = 0;

mysql_connect("localhost","root","");

mysql_select_db("car");



$x = mysql_query("SELECT MAX(`index1`) AS heykel FROM voiture");

$mx = mysql_fetch_array($x);



$_SESSION['maxim'] = "";

$_SESSION['maxim'] = $mx['heykel'];



$rtc = "";

$rtc = $_SESSION['heykel1'];





?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Untitled Document</title>

<style type="text/css">

<!--

body {

background-color: #DFDCE4;

}

.Style1 {

font-size: 18px;

font-weight: bold;

}

.Style2 {font-size: 24px}

.Style4 {font-size: 24px; font-weight: bold; }

-->

</style></head>





<script language="javascript">

xhr_url = 'admin/ecouteur.php';

old_xhr_response = '<? echo $_SESSION['maxim']; ?>';

var xhr_object = null;

function SendGetRequest() {

if ( window.XMLHttpRequest ) {

// Objet XmlHttpRequest pour les moteurs GECKO

xhr_object = new XMLHttpRequest();

} else if ( window.ActiveXObject ) {

// Objet XmlHttpRequest pour Internet Explorer

xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );

} else {

// Navigateur non-compatible

alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );

return;

}

// On ouvre la requete vers la page désirée

xhr_object.open( 'GET', xhr_url, true );//
Je doute que le mode de transmission de donnees n'est pa correct
puisque je ne transmet pas de donnees je veu seulement recupere le
dernier enregistrement de ma base et je croit que CallBackRequest
permet la comparaison de l'ancien index et le nouveau recuppere par la
page

// On lui donne le pointeur de fonction de retour

xhr_object.onreadystatechange = CallBackRequest;

// On envoi la requete

xhr_object.send( null );

}



function CallBackRequest() {

// Sur le retour de la requete, on teste son état

if ( xhr_object.readyState == 4 ) {



//il faut maintenant connaître la valeur de la dernière entrée de ta base de donnée :

if(xhr_object.ResponseText != old_xhr_response) {

old_xhr_response = xhr_object.ResponseText;

document.getElementById('contenu').innerHTML = xhr_object.ResponseText;

javascript:location.reload();//Ext ce que ca permet de rafraichir la page ??????????? si nouveau enregistrement

}

}

}

SetInterval("SendGetRequest()",10)



</script>





Pour la page ecouteur j'ai rien changer .

Merci bq
0
atlante34 Messages postés 14 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 24 janvier 2012
10 mai 2006 à 14:31
RE:
ce que je te disais a propos de la variable est que elle crée dans la fonction SendGetRequest() et que ensuite tu l'appelles dans CallBackRequest.
Met la dans :
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
...

Deja une variable, en javascript c'est : var nom variable...
Donc:
var xhr_url = 'admin/ecouteur.php';
var old_xhr_response = '<? echo $_SESSION['maxim']; ?>';

pour simplifier:
xhr_object.open( "POST", "admin/ecouteur.php", true ); //post pour plus de securité
et tu rajoutes juste avant le xhr_object.send( null );
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");

le location.reload() permet de rafraichir la page meme si elle n'a pas été modifiée (ca force le rafraichissement).Mais je ne pense pas que la mettre dans le javascript, ca marche comme ca.
a la place de javascript:location.reload(); met ca => window.location.reload()

---------------------------------------------------------------------------------
xhr_object.open( 'GET', xhr_url, true );// Je doute que le mode de transmission de donnees n'est pa correct puisque je ne transmet pas de donnees je veu seulement recupere le dernier enregistrement de ma base et je croit que CallBackRequest permet la comparaison de l'ancien index et le nouveau recuppere par la page
-------------------------------------------------------------------------------
le open demande juste le fichier, et le fait que tu mette xhr_object.send( null ); ca implique que tu n'envoi pas de données.

voici le code complet :
*********************************************.
<script language="javascript">
var old_xhr_response = null;
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
xhr_object.open( "POST", "admin/ecouteur.php", true );
xhr_object.onreadystatechange = CallBackRequest;
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr_object.send( null );
}

function CallBackRequest() {
if ( xhr_object.readyState 4 && xhr_object.status 200)//tu vérifie a fond
{
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
document.getElementById('contenu').innerHTML=xhr_object.ResponseText;
window.location.reload()
}
}
}
SetInterval("SendGetRequest()",10)

</script>

Honnetement, je fais ca de tete, je ne suis pas sur du résultat, mais esaye...
A bon entendeur,
Atlante34
0
hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007
10 mai 2006 à 14:53
Limaiem heykel
Ca marche pas encore. Est ce que y a t il une autre solutions pour regler ce probleme moi ce que je souhaite obtenir et le rafraichissement de la page des que j'ai de nouveau enregistrement dans ma base donc seulement rafraichir je compare le plus grand index de ma page afficher avec celui que la page ecouteur renvoit si nouveau_enregistrement > ancien_afficher je rafraichit la page sinon pas de rafraichissement.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
atlante34 Messages postés 14 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 24 janvier 2012
10 mai 2006 à 15:10
Salut, est ca que tu recoit bien tout ce qu'il faut?
essayes ca :

********************************
<script language="javascript">
var old_xhr_response = null;
function SendGetRequest() {
var xhr_object = null;
if ( window.XMLHttpRequest ) {
// Objet XmlHttpRequest pour les moteurs GECKO
xhr_object = new XMLHttpRequest();
} else if ( window.ActiveXObject ) {
// Objet XmlHttpRequest pour Internet Explorer
xhr_object = new ActiveXObject( 'Microsoft.XMLHTTP' );
} else {
// Navigateur non-compatible
alert( 'Votre navigateur ne supporte pas les objets XMLHTTPRequest...' );
return;
}
xhr_object.open( "POST", "admin/ecouteur.php", true );
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState 4 && xhr_object.status 200)//tu vérifie a fond
{
if(xhr_object.ResponseText != old_xhr_response) {
old_xhr_response = xhr_object.ResponseText;
alert("reception de\n"+xhr_object.ResponseText);
document.getElementById('contenu').innerHTML=xhr_object.ResponseText;
window.location.reload()
}
}
}
xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr_object.send( null );
}

var chrono=setInterval("SendGetRequest()",10);//setinterval retourne qqchose

</script>
**********************************
Si je comprend bien tu veux que la page se rafraichisse des que il y a une modification de la BdD.
En effet lorsque (dans ce prog), tu lances la fonction , tu compares le contenu.
Mais la ce que tu compares c'est le contenu de la page .php
Quand tu fais : xhr_object.open( "POST", "admin/ecouteur.php", true );
tu recois le contenu de ecouteur.php(le code) est il va l'executer dans le div ou ce que tu as appellé ('contenu').
Regardes ce que tu recoit et dit moi ce que tu as recu ...

Atlante34
0
hlimaiem Messages postés 106 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 17 janvier 2007
10 mai 2006 à 22:34
Limaiem heykel
Bon j'ai essayer mais aparament on mettant une alerte l'instruction de rafraichissement ne fonctionne pas j'ai ajouter ; mais ca marche pas encore
window.location.reload();// donc je la remplace par koi???????
Et a propos de l'utilisation de var chrono=setInterval("SendGetRequest()",10); Je la declanche comment ???
Merci
0