A voir également:
- [AJAX] innerHTML, setInnerHTML, ... problème!
- Ajax echo ✓ - Forum PHP
- Curl ajax ✓ - Forum Javascript
- Ajax utf8 ✓ - Forum Programmation
- Ajax googleapis - Forum Réseaux sociaux
- Problème d'actualisation avec innerHTML ✓ - Forum HTML
6 réponses
burnedsyn
Messages postés
170
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
21 février 2009
16
19 juin 2008 à 08:41
19 juin 2008 à 08:41
Bonjour,
Je peux t'aider mais en changeant un peu le mode sur lequel tu es parti,
En fait, bien que je comprenne ce que tu veux faire, je pense que tu manque un peu ta cible dans le sens ou tu veux utiliser ajax pour transferer le moins possible de données, hors a chaque appel tu renvois le tableau complet...
il serait plus judicieux de ne renvoyer que la ligne que tu as effectivement ajoutée a la bd.
Donc en exemple la table suivante :
Ceci est une table représentant un caddi
remarque que la table a un element TBODY et que celui ci a une id => bodytiti (important sinon ca va pas).
ceci serait le code hypotéthique qui ajoute une ligne au caddi et renvois l'item selectionné :
Voici le js qui appelle la page php au traver d'ajax :
function addtocart(obj)
{
Quant=document.getElementById(obj);
var xhr1=getXhr();
xhr1.onreadystatechange = function()
{
if(xhr1.readyState == 4 && xhr1.status == 200)
{
//on récupère la reponse json et on l'interprète
var json = xhr1.responseText.evalJSON(true);
//ici on recupère l'element table.
test=document.getElementById('cadtbl');
//on insere une nouvelle ligne dans la table
var newRow = test.insertRow(-1);
newRow.id='cadtblrowdel_'+json.id;
//on attribue une id a cette ligne ^^
//a partir d'ici on ajoute manuellement les cellules a la ligne remarque que certaine ont une id
var newCell = newRow.insertCell(0);
newCell.innerHTML = json.item_name;
var newCell = newRow.insertCell(1);
newCell.innerHTML = Quant.value;
newCell.id='itemquant'+json.id;
var newCell = newRow.insertCell(2);
newCell.innerHTML = json.item_price+'€';
var newCell = newRow.insertCell(3);
newCell.innerHTML = json.item_price*Quant.value+'€';
newCell.id='totprice'+json.id;
var newCell = newRow.insertCell(4);
json.it='itemquant'+json.id;
json.toto='totprice'+json.id;
//ici en dessous on prépare une cellule spécial elle nous sers a supprimer une ligne du tableau et de notre caddi //evidement...
json.del='<a id="del_'+json.id+'" onclick="if (window.confirm(\'Vous etes sur de ne pas faire une betise ?\')){delcadrow(this);return false;} else {return false;}">';
newCell.innerHTML = json.del+'<img id="del_'+json.id+'" src="./img/del.jpg"></a>';
}
}//Onreadystatechange
xhr1.open("POST","addCartItem.php",true);
xhr1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr1.send("id="+obj+"&quant="+Quant.value);
}
</code>
Voici la fonction pour enlever une ligne dynamiquement :
Voila j'espère que cela t'aidera :d
Tim
Je peux t'aider mais en changeant un peu le mode sur lequel tu es parti,
En fait, bien que je comprenne ce que tu veux faire, je pense que tu manque un peu ta cible dans le sens ou tu veux utiliser ajax pour transferer le moins possible de données, hors a chaque appel tu renvois le tableau complet...
il serait plus judicieux de ne renvoyer que la ligne que tu as effectivement ajoutée a la bd.
Donc en exemple la table suivante :
$caddie="<span class='shop_header'>$shop_cad $cid</span>"; $caddie.="<form id='cad_form' >"; $caddie.="<table class='shop_tbl' id='cadtbl' border='2'><tbody id='bodytiti'>"; $caddie.="<tr><th>name</th><th>quant</th><th>pu</th><th>pt</th><th>del</th></tr>"; $caddie.="</tbody></table></form>";
Ceci est une table représentant un caddi
remarque que la table a un element TBODY et que celui ci a une id => bodytiti (important sinon ca va pas).
ceci serait le code hypotéthique qui ajoute une ligne au caddi et renvois l'item selectionné :
$query="select * from shop_product where id=$itemid"; $res=mysql_query($query); $t=mysql_fetch_object($res); /*ici en dessous on encode les données de l'item en json...afin de l'envoyer au script ajax.*/ echo json_encode($t)
Voici le js qui appelle la page php au traver d'ajax :
function addtocart(obj)
{
Quant=document.getElementById(obj);
var xhr1=getXhr();
xhr1.onreadystatechange = function()
{
if(xhr1.readyState == 4 && xhr1.status == 200)
{
//on récupère la reponse json et on l'interprète
var json = xhr1.responseText.evalJSON(true);
//ici on recupère l'element table.
test=document.getElementById('cadtbl');
//on insere une nouvelle ligne dans la table
var newRow = test.insertRow(-1);
newRow.id='cadtblrowdel_'+json.id;
//on attribue une id a cette ligne ^^
//a partir d'ici on ajoute manuellement les cellules a la ligne remarque que certaine ont une id
var newCell = newRow.insertCell(0);
newCell.innerHTML = json.item_name;
var newCell = newRow.insertCell(1);
newCell.innerHTML = Quant.value;
newCell.id='itemquant'+json.id;
var newCell = newRow.insertCell(2);
newCell.innerHTML = json.item_price+'€';
var newCell = newRow.insertCell(3);
newCell.innerHTML = json.item_price*Quant.value+'€';
newCell.id='totprice'+json.id;
var newCell = newRow.insertCell(4);
json.it='itemquant'+json.id;
json.toto='totprice'+json.id;
//ici en dessous on prépare une cellule spécial elle nous sers a supprimer une ligne du tableau et de notre caddi //evidement...
json.del='<a id="del_'+json.id+'" onclick="if (window.confirm(\'Vous etes sur de ne pas faire une betise ?\')){delcadrow(this);return false;} else {return false;}">';
newCell.innerHTML = json.del+'<img id="del_'+json.id+'" src="./img/del.jpg"></a>';
}
}//Onreadystatechange
xhr1.open("POST","addCartItem.php",true);
xhr1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr1.send("id="+obj+"&quant="+Quant.value);
}
</code>
Voici la fonction pour enlever une ligne dynamiquement :
function delcadrow(obj) { //alert(obj.id); toclean='cadtblrow'+obj.id; //alert(toclean); test=document.getElementById(toclean); titi=test.childNodes; for(i=0;i<titi.length;i++) { test.removeChild(titi[i]); } t=test.parentNode; t.removeChild(test) }
Voila j'espère que cela t'aidera :d
Tim
Moi aussi j'ai un problème équivalent.
Avec Firefox tout marche bien mais sous IE la fonction suivante ne marche qu'une fois.
function mafonctionl(){
$.ajax({
url: "cgi-bin/fichier.pl",
success: function(data){
modification de données
}
});
}
En fait a chaque fois que j'appel cette fonction la valeur de data est toujours la même, comme si il ne relancait pas la fonction et qu'il réulisait la data préalablement sauvegarder.
Merci à ceux qui pourront m'aider.
Avec Firefox tout marche bien mais sous IE la fonction suivante ne marche qu'une fois.
function mafonctionl(){
$.ajax({
url: "cgi-bin/fichier.pl",
success: function(data){
modification de données
}
});
}
En fait a chaque fois que j'appel cette fonction la valeur de data est toujours la même, comme si il ne relancait pas la fonction et qu'il réulisait la data préalablement sauvegarder.
Merci à ceux qui pourront m'aider.
burnedsyn
Messages postés
170
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
21 février 2009
16
20 févr. 2009 à 13:08
20 févr. 2009 à 13:08
que renvois ton script cgi-bin/fichier.pl", car c'est au retour de son appel que tu utilise data (qui semble etre la reponse du script)
vois de ce coté la et dis moi quoi
vois de ce coté la et dis moi quoi
burnedsyn
Messages postés
170
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
21 février 2009
16
20 févr. 2009 à 18:00
20 févr. 2009 à 18:00
alors tu as un soucis au niveau du traitement des données recue dans le onsuccess
mais tu ne donne pas le code je ne sais donc pas t'aider plus
tim met le code que tu fais lorsque tu recois la reponse
merci
mais tu ne donne pas le code je ne sais donc pas t'aider plus
tim met le code que tu fais lorsque tu recois la reponse
merci
Le problème ne vient pas du traitement des données, tout ce qui est dans la fonction success fonction très bien même sur IE.
Pour développer un peu plus, cette fonction est d'abord appelée au chargement. A ce moment la tout va bien. Ensuite, elle est rapellée par une autre fonction est la ça merde.
En gros ça donne ça :
Chargement de la page -> appelle de la fonction : du coup data=paramètre1=1\nparamètre2=2 (par exemple)
Ensuite je change le paramètre2 et je le met a 3. Puis je clic sur un bouton qui rapel la fonction
Sous FF ça donne data=paramètre1=1\nparamètre2=3 (ce qui est demandé) mais sous IE data nest pas modifier parce que le script perl n'est même pas exécuté.
Je voudrais donc savoir pourquoi il n'est pas exécuté et comme y remédier ou au moins une piste.
Merci d'avance.
Pour développer un peu plus, cette fonction est d'abord appelée au chargement. A ce moment la tout va bien. Ensuite, elle est rapellée par une autre fonction est la ça merde.
En gros ça donne ça :
Chargement de la page -> appelle de la fonction : du coup data=paramètre1=1\nparamètre2=2 (par exemple)
Ensuite je change le paramètre2 et je le met a 3. Puis je clic sur un bouton qui rapel la fonction
Sous FF ça donne data=paramètre1=1\nparamètre2=3 (ce qui est demandé) mais sous IE data nest pas modifier parce que le script perl n'est même pas exécuté.
Je voudrais donc savoir pourquoi il n'est pas exécuté et comme y remédier ou au moins une piste.
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
burnedsyn
Messages postés
170
Date d'inscription
samedi 29 septembre 2007
Statut
Membre
Dernière intervention
21 février 2009
16
20 févr. 2009 à 21:26
20 févr. 2009 à 21:26
voila pourquoi tu commence pas par dire ca
tu as un probleme au niveau de la declaration de l'objet XhttpRequest sans doute peux tu me montrer ton code ou tu cree l'objet ajax ?
tu as un probleme au niveau de la declaration de l'objet XhttpRequest sans doute peux tu me montrer ton code ou tu cree l'objet ajax ?
IE n'aime pas executer deux fois de suite la mm fonction.
Il faut que tu ajoutes une variable "aléatoire".
Par exemple, j'ai crée une variable count.
ma fonction {
var count = Math.random();
var session = document.getElementById('session').value;
var acp = CreateXMLHttpRequest ();
var method = 'GET';
var filename = 'inc/contenu_panier.php?session='+session+'&count='+count;
}
Avec cette petite variable, IE ne pense exécuter la même requete et tout se passe correctement.
Il faut que tu ajoutes une variable "aléatoire".
Par exemple, j'ai crée une variable count.
ma fonction {
var count = Math.random();
var session = document.getElementById('session').value;
var acp = CreateXMLHttpRequest ();
var method = 'GET';
var filename = 'inc/contenu_panier.php?session='+session+'&count='+count;
}
Avec cette petite variable, IE ne pense exécuter la même requete et tout se passe correctement.
19 juin 2008 à 12:36
Le souci, c'est que mon tableau est géré dynamiquement par un plugin jQuery qui permet le tri automatique.
Et je n'ai toujours pas trouvé comment faire pour recharger la page en Ajax, tout en rechargeant les fonctions de tri (puisque le contenu de la table a été modifié).
Mais je garde ton code sous la main, lorsque j'aurais résolu mon problème j'essayerais de mettre ça en place.
Merci.
4 déc. 2008 à 11:19
Je suis dans le meme cas que toi, et je voudrais savoir si tu avais trouvé une solution à ton problème.
Comme toi je fais des traitements en utilisant ajax, et lorsque le traitement est réalisé avec l'ajax, je fais appel à une autre fonction javascript, mais celle ci n'est pas reconnu.
Aurais tu un exemple tout simple, pour m'expliquer ta solution si tu en as une.
J'ai lu pas mal de chose sur ce sujet mais aucune solution qui fonctionne réellement.
@+
PS : Je pense qu'on est plusieurs dans cette situation
11 févr. 2009 à 05:43
Idem pour moi.
J'ai un probleme de fonction non reconnu lorsque que j'essaie de récupérer des données boucler dans un while.
Autre pb : Je n'arrive pas à installer Json.
Merci de votre :)
11 févr. 2009 à 18:02
pourrais tu donner ton code qui bug stp et qu'entend tu par je n'arrive pas a installer json ?
tim
21 févr. 2009 à 18:59
Désolé je n'avais pas vu ta réponse :s
J'ai acheté un bouquin sur Ajax, l'auteur utilise Json dans ses exemples, sans expliquer précisément comment l'installer. J'arrive à utiliser Prototype mais pas Json. C'est dommage parce que je peux pas travailler les exemples de l'auteur.
Déjà rien que pour savoir quel dossier télécharger... lol.
J'ai télécharger un dossier json-1.2.1, dedans j'ai des fichiers config, json parser, php json...
Je suis chez ovh, php 5 est utilisé.
enfin voili.
Si tu as quelques indication d'utilisation.
Et merci pour ta réponse :)