Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1640 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

Greasemonkey, traiter les données d'un tableau

n°2208948
MaybeEijOr​Not
but someone at least
Posté le 01-11-2013 à 14:03:54  profilanswer
 

Reprise du message précédent :
Si tu ne récupères pas la valeur en jquery (ce qui n'est pas vraiment utile) alors non tu n'as pas besoin de boucle, juste prendre l'élément de l'index 0.
 
Autrement setAttribute est plus pour créer une attribut quand il n'existe pas encore, mais bon ça modifie aussi valeur de l'attribut s'il existe déjà. Tu pourrais tout aussi bien faire :

Code :
  1. choixHeure.className = "selectedValue";


 
Enfin bref le problème n'est pas là, juste comme ça, tu as pensé à retirer l'ancienne selectedValue si tu en choisis une nouvelle? Parce qu'autrement tu te retrouves avec 2 cellules ayant pour class "selectedValue".
 
Après pourquoi tu dois vraiment cliquer sur le chiffre, ben ça dépend comment ça a été codé, c'est bizarre mais ça voudrait dire qu'il déclenche l'évènement sur le contenu de la cellule et non sur le cellule même.
 
 
Tu as quoi comme message d'erreur dans la console web?

mood
Publicité
Posté le 01-11-2013 à 14:03:54  profilanswer
 

n°2208963
ordimans
Posté le 01-11-2013 à 17:41:12  profilanswer
 

Bien vu, le 0 aurait pu être sélectionné par défaut. Mais c'est pas ça.
Toujours la même erreur.
 
Dans la console de Firebug, j'ai rien....
Y a moyen de voir le bout de code qui génère le popup d'erreur ?
 
EDIT:
Ah j'ai peut être trouvé, y a un bout de codes entre deux balises script :
 

EDIT 21h30 : J'ai trouvé merci pour l'info de la console WEB

Elle m'a donné le script de validation avec

Code :
  1. //Condition générale
  2. if (int_societe == '' || int_categorie == '' || int_projet == '' || !bool_navigateur || !bool_date)
  3. {
  4. alert('Des erreurs ont été detectées lors de l\'enregistrement, Veuillez vérifier votre saisie.');
  5. return false;
  6. }


 
puis en remontant  

Code :
  1. var nb_jour=$('#recap_jour').text();
  2. var nb_heure=$('#recap_heure').text();
  3. if (nb_jour == '0' && nb_heure == '0')
  4. {
  5. //$('#recap_jour').css('border','1px solid red');
  6. $('.compteur_jour').parents('table').first().css('border','1px solid red');
  7. $('.compteur_jour').parents('table').first().addClass('contenu');
  8. //$('#recap_heure').css('border','1px solid red');
  9. //$('.compteur_heure').css('border','1px solid red');
  10. $('.compteur_heure').addClass('contenu');
  11. var bool_date = false;
  12. }


 
 
J'avais carrément zappé qu'il y avait la petite zone texte sur la droite de la sélection qui se mettait à jour.
Et je le voyais pas sur Firebug, car cela n'affiche les changements de valeur que sur les objets déployés, s'ils ne le sont pas, il n'y a pas la surbrillance.
Bref nickel.
 
J'ai fait ça du coup  

Code :
  1. document.getElementsByTagName('table')[jourPave-2].getElementsByTagName('font')[0].innerHTML = 1;
  2.   document.getElementsByTagName('table')[jourPave-2].getElementsByTagName('font')[2].innerHTML = 3;


 
Vaut mieux faire ça, ou un .textContent quand on attribue une valeur ?
 
 
Maintenant, bah ca marche pratiquement,  me reste quelques trucs :
-Sur la première page, je souhaite vérifier que la plage de date utilisé corresponde à la même semaine. C'est possible ?
Par exemple, si l'utilisateur saisit 01/11/13 et 05/11/13 attention, nous ne sommes pas sur la même semaine
-Sur la deuxième page, il faut que j'aille sur la bonne semaine aussi si ce n'est pas la semaine en cours. Et là bah faut que je parcourt un petit tableau qui est sur la droite, et que je fasse un click.
Par contre il faudra pas que je perde les valeurs.
-Enfin dernier truc, une fois que mes valeurs sont insérés, je soumets le formulaire le problème c'est qu'il le soumets à l'infini vu que le script est toujours actif.
Comment tu ferais pour une fois que c'est soumis, on stop. Vu que la page se recharge ?
Une variable globale ?


Message édité par ordimans le 01-11-2013 à 21:36:52
n°2209038
MaybeEijOr​Not
but someone at least
Posté le 02-11-2013 à 21:04:32  profilanswer
 

Pour le formulaire tu peux soit en effet faire une variable globale soit envoyer les données par ajax.
 
Pour la date, ça peut se faire, faut que tu calcules à quel numéro de semaine correspond la date saisie, juste faire une division euclidienne par 7 sur le nombre de jours cumulés depuis le début de l'année.
 
Après pour parcourir le tableau des semaines, ça dépend comment ça se passe, c'est par JS ou par PHP que c'est géré?

n°2209042
ordimans
Posté le 02-11-2013 à 22:54:05  profilanswer
 

MaybeEijOrNot a écrit :

Pour le formulaire tu peux soit en effet faire une variable globale soit envoyer les données par ajax.
 
Pour la date, ça peut se faire, faut que tu calcules à quel numéro de semaine correspond la date saisie, juste faire une division euclidienne par 7 sur le nombre de jours cumulés depuis le début de l'année.
 
Après pour parcourir le tableau des semaines, ça dépend comment ça se passe, c'est par JS ou par PHP que c'est géré?


C'est du php ça sera pas trop dur une fois trouve la semaine dans le tableau faudra juste pas perdre les infos au changement mais a priori en post ça reste .

 


Par contre pour envoyer les donnes par Ajax tu m'expliques un peu plus ?
Les globales je suis pas fan , peut y avoir des merde

n°2209082
MaybeEijOr​Not
but someone at least
Posté le 03-11-2013 à 17:16:10  profilanswer
 

Si c'est géré par PHP il faut regarder si c'est envoyé par variable GET ou POST. Si c'est par GET ben il suffit de générer le lien correspondant http://lien?page=date (un truc dans le genre), si c'est par POST il faut trouver la variable envoyée.

n°2209095
ordimans
Posté le 03-11-2013 à 18:58:51  profilanswer
 

Ah oui c'est par Post.
J'ai décodé l'envoi la dernière fois avec TamperData, le problème c'est que c'est juste le bordel pour savoir à quoi correspond chaque valeur... y en avait plus d'une trentaine....
Car j'aurai pu appeler direct le lien de la première page après, sans me faire chier à compléter le form de la seconde.

n°2209133
MaybeEijOr​Not
but someone at least
Posté le 04-11-2013 à 10:25:30  profilanswer
 

Donc si je comprends bien, quand tu cliques sur un numéro de page tu n'as pas un lien qui finit par "?xxx=yyy&aaa=bbb"?
Si tu n'as pas ce genre de lien alors oui c'est par méthode Post mais dans ce cas là il vaut mieux regarder du côté HTML dans le code source ce qu'il y a comme formulaire. Avec les noms de champ on devrait s'y retrouver, sachant qu'a priori une seule valeur changera, toutes les autres pourront rester les mêmes.

n°2209352
ordimans
Posté le 05-11-2013 à 21:43:21  profilanswer
 

Encore un petit soucis sur mon "pavé numérique"
 
Malgre le fait que la vérification passe et que le formulaire soit envoyé, les valeurs POST compteur_xxx sont à 0.
 
Dans le script j'ai vu ça :

Code :
  1. var compteur_jour=$('.compteur_jour');
  2. compteur_jour.JQCompteur('selectValue',nb_jour);
  3. et
  4. var compteur_jour=$('.compteur_jour');
  5. compteur_jour.bind('click',actualiseValeurImputation);
  6. var compteur_heure=$('.compteur_heure');
  7. compteur_heure.bind('click',actualiseValeurImputation);
  8. et
  9. var compteur_jour=$('.compteur_jour');
  10. compteur_jour.JQCompteur('selectValue',nb_j);
  11. var compteur_heure=$('.compteur_heure');
  12. compteur_heure.JQCompteur('selectValue',nb_h);


 
 
Tu vas me dire de les affecter direct en POST sans se faire chier à passer par le Jquery ?
Si c'est fait en deux lignes, et que ca m'évite de me faire chier. Je vais t'écouter. :D
(même si j'aimerais savoir comment sélectionner une valeur dans une zone de Jquery....)


Message édité par ordimans le 05-11-2013 à 21:44:04
n°2209355
MaybeEijOr​Not
but someone at least
Posté le 05-11-2013 à 22:24:23  profilanswer
 

Faudrait trouver la fonction JQcompteur(arg1, arg2) pour t'en dire plus.
Le .bind sert à ajouter l'écoute d'un évènement à un élément.
 
Autrement il suffit de modifier la valeur de l'élément s'il existe déjà pour changer sa valeur en post. S'il n'existe pas tu peux l'ajouter via un input caché par exemple, le nom de la variable est le nom de l'élément.
 

Code :
  1. <input type="hidden" name="nomvariable" value="valeurvariable" />


 
Après si tu envoies le formulaire en ajax c'est encore plus simple car il suffit de modifier la requête.

n°2209359
ordimans
Posté le 05-11-2013 à 23:00:12  profilanswer
 

J'ai trouvé input merci.

Code :
  1. i=0;
  2.    while(document.getElementsByTagName('input')[i].name != 'compteur_jour' ) {
  3.    i++;
  4.   }
  5.   compteurJour = document.getElementsByTagName('input')[i];
  6.   compteurJour.value = tpsJour;


 
Faut que je relise ton explication sur l'envoi du formulaire en ajax.
 
 
Sinon autre soucis. Là la liaison marche mes données passent bien du premier onglet au second.
Par contre, j'ai voulu utilisé un localStorage pour ne faire le script qu'une fois mais ca marche pas très bien.
JE dois mal l'utiliser.
sur ma première page, j'execute ça (sauf erreur de ma part)
 

Code :
  1. //nettoyage du LOCALSTORAGE
  2.   localStorage.clear();
  3.    
  4.   localStorage.setItem('AJT_APPLI_DONE','FAUX');


 
 
et la seconde
 

Code :
  1. console.log(localStorage.getItem('AJT_APPLI_DONE'));
  2.   console.log('avant check ' + localStorage.getItem('AJT_APPLI_DONE'));
  3.   var aPointer = localStorage.getItem('AJT_APPLI_DONE');
  4. console.log(aPointer);
  5.   if(aPointer != 'VRAI') {blabla}


 
 
Ca te parait bon ?
 
 
Sinon autre problème (lié je sais pas).
Le script se fait bien, et j'arrive à la fin, le formulaire est soumis mais rien n'a été validé....
Alors que si je valide à la main ca marche.
 
Mon code pour la validation

Code :
  1. // recherche du bouton d'Envoi PUIS CLICK
  2.   i=0;
  3.    while(document.getElementsByTagName('input')[i].name != 'actionSave' ) {
  4.    i++;
  5.   }
  6.    boutonValidation = document.getElementsByTagName('input')[i];
  7.   
  8.    //avant click on attend quelques secondes
  9. boutonValidation.click();


 
 
 
 
 

mood
Publicité
Posté le 05-11-2013 à 23:00:12  profilanswer
 

n°2209360
MaybeEijOr​Not
but someone at least
Posté le 05-11-2013 à 23:19:39  profilanswer
 

Le localstorage je connais juste son existence, après je peux me documenter mais pas ce soir.
 
 
Autrement essaye .submit() au lieu de .click()


Message édité par MaybeEijOrNot le 05-11-2013 à 23:19:56
n°2209493
ordimans
Posté le 06-11-2013 à 20:48:00  profilanswer
 

Bon le submit ca faisait rien.
par contre j'ai fait comme ça :
 

Code :
  1. setTimeout(function() {boutonValidation.click();},2000);


 
Ca marche nickel, y a bien une petit pause, le temps que toutes les données se mettent et que ca se refresh à l'écran.
Et ca soumets le formulaire et c'est bon.
 
Je sais pas pourquoi. A priori, ca avait pas le temps de finir d'affecter et une valeur était pas encore affecté ce qui fait que lors de la soumission, le contrôle de cohérence était bon, mais pas après dans le traitement.
 
Par contre, me reste ce localstorage, faut que je revérifie mais ca a pas l'air de marcher.
Une fois à vrai, il reste à Vrai, j'arrive pas à le remettre à Faux.
(je l'ai mis dans la fonction envoieData que j'appelle sur mon bouton crée sur la première page c'est peut être pour ça)

n°2209501
MaybeEijOr​Not
but someone at least
Posté le 06-11-2013 à 21:31:47  profilanswer
 

Me suis pas encore renseigné sur le localstorage, autrement pour éviter le setTimeout tu peux ajouter à la balise body un attribut onload qui appelle ta fonction de click.
 
onLoad="autoclick();"
 
function autoclick() {
  boutonValidation.click();
}
 
 
L'attribut onLoad sert à charger des fonctions une fois le téléchargement de la page complété.

n°2209694
ordimans
Posté le 07-11-2013 à 23:47:15  profilanswer
 

Grosse question encore :D
Peut être que tu auras une idée pour faire autrement.
 
En gros, sur mon site 1, j'ai des noms A B C D E.
Et sur mon site 2 que j'ouvre, j'ai les correspondances 1, 2 , 3 , 4 , 5.
Dans le meilleur de cas, j'aurai A=1 (identique), dans le pire ca sera différent, et faut que le lien soit initié on va dire.
 
Mon idée, était que si lors de ma recherche de mon nom B, je trouve pas dans le menu déroulant. J'avertisse l'utilisateur avec un popup et là il choisisse le bon nom sur le site 2 dans la liste déroulante.
Et qu'une fois cliqué , là je rajoute un truc sur l’événement onChange je présume afin de créer ce lien B-2 et l'enregistrer quelques parts.
Et là je pensais à un forms Google ou Spreadsheet google.
Afin de tout référencer dedans.
 
Peut on écrire et lire en javascript un spreadsheet. En gros j'aurai deux colonnes, Site 1 et Site 2.
Ma fonction sera, donne moi le nom pour x sur le Site 2.
 
Donc est ce possible avec un google. On enverrait ca sur un lien forms direct, ou peut être autrement.
 
Ou bien carrément autrement, si t'as une idée.
 
Le but est que ça soit communautaire au début pour que tout le monde en profite.
ET l'avantage c'est que là tout le monde pourra consulter la liste.
 
Plus j'avance, plus je commence à peaufiner le truc :D

n°2216627
ordimans
Posté le 19-01-2014 à 22:17:14  profilanswer
 

Petit UP.
 
J'ai attaque les Google Script afin de tout stocker dans un tableau, mes conversions siteA/siteB.
 
Pour alimenter c'est OK, j'appelle l'URL du Google Script avec les valeurs en GET et zouh ca enregistre une nouvelle ligne.
Par contre, est il possible d'ouvrir ça silencieusement ou dans un popup sans faire un Window.open et ouvrir un nouvel onglet ??

 
 
ENsuite pour récupérer les valeurs bah là c'est plus dur, j'ai une function dans mon GS qui cherche la valeur et fait un return value;
Mais ca va pas.
JE cherche à récupérer la valeur du GS sur un autre site (et non un HTML stocké côté google) ou par une quelconque méthode. Et je vois pas trop là....
 
J'ai trouvé ça  

Code :
  1. return ContentService.createTextOutput(e.parameters.prefix + '(' + "TEST" + ')'  ).setMimeType(ContentService.MimeType.JAVASCRIPT);


 
Mais je comprends pas trop....
Après si y a une autre solution je prends :D
 
Code GS :
 

Code :
  1. //DEFINE THE SPREADSHEET ID
  2. var idOfSS = "bblalbla";
  3. var sheet = SpreadsheetApp.openById(idOfSS);


Message édité par ordimans le 24-05-2017 à 16:52:05
n°2216717
MaybeEijOr​Not
but someone at least
Posté le 20-01-2014 à 14:43:37  profilanswer
 

Avec uniquement javascript je ne crois pas que ce soit possible parce que tu as bien XMLHttpRequest() mais qui se fait sur le même domaine que la page hébergée il me semble.
Autrement il faut que sur google tu génères un script js avec les données et tu n'as plus qu'à inclure le script sur ton site. Mais cela suppose que le script soit généré par PHP (ou autre) par google.
 
Sinon aucune idée.

n°2216812
ordimans
Posté le 20-01-2014 à 20:16:30  profilanswer
 

C'est ce que j'ai trouvé, et je viens de tester.
 

Code :
  1. var req = null
  2.  req = new XMLHttpRequest();
  3.  req.open("GET","https://script.google.com/macros/s/TEST/exec?before=Coucou&after=&from=Test",true);
  4.  req.send();
  5.  console.log("Return from GS ==> " + req.responseText );


 
avec dans le google script, bah du basique  
 

Code :
  1. return ContentService.createTextOutput('TEST');


 
Bah ca marche pas, je me tape un :
302 Moved Temporarily  1s  
 
D'après firebug....
Pas sur le même domaine ca doit merder en effet.
 
Du coup là je sèche un peu. Me manque juste ça, un tableau de conversion accessible et alimentable par tous.
Ca marchait super bien sinon :o


Message édité par ordimans le 05-03-2019 à 21:10:56
n°2216851
MaybeEijOr​Not
but someone at least
Posté le 21-01-2014 à 09:03:44  profilanswer
 

Après s'il y avait un moyen de faire ça tu ne serais pas passer par google je pense. Et du côté du LocalStorage tu n'as pas avancé?
 
Cela me semble logique que le XMLHttpRequest() ne fonctionne pas en distant pour des raisons de sécurité. Autrement dans ce que tu as écrit tu vas peut-être trop vite, attend le changement d'état histoire que ça charge correctement la page : onreadystatechange.

n°2216986
ordimans
Posté le 21-01-2014 à 21:54:17  profilanswer
 

Côté LocalStorage, j'ai laissé tombé, c'était trop pour faire ce que je voulais.
J'ai préféré faire un &done=0, que je passe à 1 une fois le traitement fait.
 
Sinon j'ai réussi et c'est magique, je récupère mes données du google script sans problème :D
Donc ce que j'ai utilisé dans le script GM c'est :

 

Code :
  1. ...


 
 
Avec la petite bidouille du sentback.... Mais j'ai toujours du mal avec ces fonctions.
 
En faite, le XMLHttpRequest ne supporte pas le cross domain, après avoir appris ça, j'ai cherché et  cherché sur google car il y avait forcément des gens qui ont voulu faire ça.
Et j'ai trouvé une page ou quelqu'un parlait de faire ça avec un sscript GM, et il a filé la commande GM, qui a été mise depuis tel version.
J'ai mis le bout de code, et direct ça a marché, j'ai obtenu la réponse.
Après j'ai repaufiné mon code GS, géré la casse, et là ca marche bien.
 
Du coup, faut que je passe ça une seconde fois pour le côté enregistrement sur google. (mieux que le Windows.open qui ouvre une fenêtre :D)
 
Là j'appelle ça avec l'URL et les champs GET qui vont bien et zou.
 
mais comme je disais au début, ca appelle la fonction avant que j'ai cliqué....
 
Par contre, j'ai encore le soucis, d'appel de fonction avant de cliquer...
 
 
Dernière chose, la publication des google script merdouille j'ai l'impression, car je publie, si j'accède avec le lien de test /dev ca marche, avec le /exec ca me sort une erreur d'une de mes premières versions de script comme s'il écrasait pas....
M'enfin là je suis content car je vais pouvoir alimenter mon tableau Google rapidement et me reservir des valeurs.(avec le petit compteur qui s'incrémente quand tu cliques sur l'autre site c'est juste énorme :D)
 

Autre chose, on peut pas mettre des parametres en out sur une fonction javascript ?

 
Genre :

Code :
  1. function envoi(in,out) {
  2. out = in;
  3. }
  4. var in = "test";
  5. var out;
  6. envoi(in,out);


 
On peut faire du out qu'avec un return c'est ça ?

Message cité 1 fois
Message édité par ordimans le 24-05-2017 à 16:52:21
n°2217005
MaybeEijOr​Not
but someone at least
Posté le 22-01-2014 à 09:39:43  profilanswer
 

Ça dépend de comment tu déclares tes variables et de comment tu veux utiliser ta fonction, par exemple ceci fonctionne très bien :
 

Code :
  1. a = 1;
  2. function test(b) {
  3. a = b + 1;
  4. }
  5. test(a);
  6. alert(a);


 
ou aussi :
 

Code :
  1. function test(b) {
  2. a = b + 1;
  3. }
  4. test(1)
  5. alert(a);


 
Par contre ceci ne fonctionnera pas :
 

Code :
  1. a = 1;
  2. function test(b) {
  3. a = b + 1;
  4. }
  5. alert(test(a));


 
Ni :
 

Code :
  1. function test(b) {
  2. var a = b + 1;
  3. }
  4. test(1)
  5. alert(a);

n°2217006
MaybeEijOr​Not
but someone at least
Posté le 22-01-2014 à 09:45:42  profilanswer
 

ordimans a écrit :

Dernière chose, la publication des google script merdouille j'ai l'impression, car je publie, si j'accède avec le lien de test /dev ca marche, avec le /exec ca me sort une erreur d'une de mes premières versions de script comme s'il écrasait pas....


 
 
Est-ce la même clé pour accéder avec le lien /dev et le lien /exec?
 
 
 

ordimans a écrit :

mais comme je disais au début, ca appelle la fonction avant que j'ai cliqué....


 
C'était quoi cette histoire?

n°2217074
ordimans
Posté le 22-01-2014 à 15:44:52  profilanswer
 

MaybeEijOrNot a écrit :


Est-ce la même clé pour accéder avec le lien /dev et le lien /exec?


 
Justement, non, le lien exec c'est le premier il est pas rafraichit.
si je prends le lien DEV ce que j'ai fait et que je mets exec ça marche.
Pour ça je suspecte un bug.
 
 

MaybeEijOrNot a écrit :


 
C'était quoi cette histoire?


 
Faut imbriqué la fonction pour pas qu'elle soit exécuté au premier passage du script mais seulement quand tu cliques.

n°2217082
MaybeEijOr​Not
but someone at least
Posté le 22-01-2014 à 16:07:20  profilanswer
 

Bon ben si tu as trouvé la solution c'est ok. Autrement pour le lien Google je ne vais pas pouvoir t'aider, je n'ai jamais utilisé ça.

n°2217123
ordimans
Posté le 22-01-2014 à 20:24:52  profilanswer
 

Sinon, j'ai passé les valeurs en GET entre le script GM et Google.
.Un intêret de les passer en POST ?


Message édité par ordimans le 22-01-2014 à 20:25:06
n°2217124
ordimans
Posté le 22-01-2014 à 20:29:13  profilanswer
 

MaybeEijOrNot a écrit :

Ça dépend de comment tu déclares tes variables et de comment tu veux utiliser ta fonction, par exemple ceci fonctionne très bien :
 

Code :
  1. a = 1;
  2. function test(b) {
  3. a = b + 1;
  4. }
  5. test(a);
  6. alert(a);


 
ou aussi :
 

Code :
  1. function test(b) {
  2. a = b + 1;
  3. }
  4. test(1)
  5. alert(a);


 
Par contre ceci ne fonctionnera pas :
 

Code :
  1. a = 1;
  2. function test(b) {
  3. a = b + 1;
  4. }
  5. alert(test(a));


 
Ni :
 

Code :
  1. function test(b) {
  2. var a = b + 1;
  3. }
  4. test(1)
  5. alert(a);



 
Merci j'ai compris.
Si tu déclares avec var dans la fonction ca sort pas de la fonction.
Si tu déclares sans var c'est une globale donc tu pourras y accéder à l'extérieur.
Si tu la déclare avant en globable pareil.
 
Par contre pourquoi le alert(test(a)); ne fonctionne pas ?
 
 
Ah oui et en faite il faut déclarer tes function à l'intérieur de la principale et pas les mettre à l'extérieur.
C'est ce que j'ai fait sur GS. la doGet{} puis une function A{} en faite faut faite doGet{function A{}, function B{}}


Message édité par ordimans le 22-01-2014 à 20:37:18
n°2217125
ordimans
Posté le 22-01-2014 à 21:44:15  profilanswer
 

Je reviens sur mon problème, en faite c'est pas ça.
 
J'ai  

Code :
  1. ....


 
 
Le problème c'est que la requête n'est pas fini et quand je passe et arrive à la log, la variable a pas encore été affecté.
Comme je fais pour attendre que la fonction est répondu, et que j'ai récupéré la valeur.
 
J'y arrive pas avec le SetTimeout, ca continue quand même....


Message édité par ordimans le 24-05-2017 à 16:52:35
n°2217126
MaybeEijOr​Not
but someone at least
Posté le 22-01-2014 à 21:45:16  profilanswer
 

Post ou Get?
 
Get est plus simple à utiliser mais a des limites comme la taille des données envoyées ou les caractères utilisés.
La méthode Post permet de passer des données sans qu'elles soient explicitement visibles par l'utilisateur. De plus elle demande de recréer un header si quelqu'un veut passer des données par un moyen détourner là où la méthode Get permet à n'importe qui de changer les valeurs.
 
 
Après ça dépend de ce que tu as comme interpréteur en réception. La méthode Get demander juste de parser le lien là où avec la méthode Post il faut lire le header puis parser.
 
 
 
EDIT : en général la méthode POST est utilisé pour plus de sécurité même si pour quelqu'un qui s'y connait cela ne changera pas grand chose.


Message édité par MaybeEijOrNot le 22-01-2014 à 21:46:32
n°2217505
ordimans
Posté le 24-01-2014 à 19:26:07  profilanswer
 

Merci pour l'info.
Je vais voir, y a moyen de faire passer de gros flux en Post je présume. Donc bien plus adapté si envoyer mes lignes en une fois.
 
Là je rentre en phase de beta test avec quelques users :D
 
Deux problèmes :
-le windows.location.href que je fais pour changer la valeur de l'URL et virer mon done=0 qui déclenche, fait que la page est rafraîchit direct. C'est normal peut être.
 
-les valeurs que je récupère de mon GS, peut contenir des espaces, du coup y a des dans le paramètre GET j'ai genre aaaa bbbbb.
et quand je décode la valeur je récupère bien tout, par contre j'ai un %20.
 
Si je passe en POST pas de soucis ?
Sinon faut que j'arrive à faire un replace. mais le string.replace("%20"," " ) ne marche pas... Pas très puissant....
 
Si je passe en POST après, pareil j'aurai juste à modifier la valeur à la fin et boum c'est réglé.
 
Après, je sens que la wish list va vite augmenter :D
Peut on rajouter ça et ça et ça :D
Mais là déjà j'ai un truc qui tient bien la route :D
 

n°2217548
ordimans
Posté le 25-01-2014 à 19:50:12  profilanswer
 

Problème réglé pour les espaces dans les paramètres GET, j'ai utilisé une autre fonction pour récupérer les paramètres et elle est bien plus pratique :
PS: Je maitrise pas trop le regex mais c'est le /gi qui fait tout ?
 

Code :
  1. function getUrlVars() {
  2.          var vars = {};
  3.          parts = decodeURI(window.location.href).replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
  4.          vars[key] = value;
  5.          });
  6.          return vars;
  7.      }


 
au lieu de :
 

Code :
  1. function getQuerystring(key, default_) {
  2.        if (default_==null) default_="";
  3.        key = key.replace(/[\[]/,"\\\[" ).replace(/[\]]/,"\\\]" );
  4.        var regex = new RegExp("[\\?&]"+key+"=([^&#]*)" );
  5.        var qs = regex.exec(window.location.href);
  6.        if(qs == null) return default_; else return qs[1];
  7.    }


n°2217641
MaybeEijOr​Not
but someone at least
Posté le 27-01-2014 à 11:29:56  profilanswer
 

Dans la première fonction il te manque un } de fermeture.
Le /g permet de capter plusieurs occurences, le /i n'est pas nécessaire dans ce cas car il permet de définir la non sensibilité à la casse.
 
La première fonction récupère toutes les variables avec leurs valeurs et les place dans un tableau.
La deuxième fonction retourne la valeur de la variable indiquée par "key".
 
EDIT : oui par post tu n'aurais pas rencontré ces problèmes mais avec decodeURI tu devrais t'en sortir, surtout que si c'est pour récupérer les variables en javascript tu n'as pas le choix.


Message édité par MaybeEijOrNot le 27-01-2014 à 11:31:53
n°2217811
ordimans
Posté le 28-01-2014 à 00:35:49  profilanswer
 

Ah j'avais pas vu le decodeURI, bah ça marche nickel en tout cas.
Je peaufine quelques compteurs là. Et je retourne au premier de test posts, pour rajouter facilement des lignes dans le tableau :D
Car bon, j'aimerais bien afficher un truc en plein milieu dans la zone d'à côté mais ça m'étonnerait qu'on puisse faire ça avec des x;y :D
 
Et demain j'attaque le POST :D

n°2217837
MaybeEijOr​Not
but someone at least
Posté le 28-01-2014 à 11:07:06  profilanswer
 

ordimans a écrit :

Car bon, j'aimerais bien afficher un truc en plein milieu dans la zone d'à côté mais ça m'étonnerait qu'on puisse faire ça avec des x;y :D


 
 
Euh si surement, enfin là comme ça sans voir le bousin pas évident de savoir. xD

n°2217970
ordimans
Posté le 28-01-2014 à 22:54:30  profilanswer
 

Bon j'attaque le POST maintenant :o
 
Mais j'ai un doute :
Puis je faire passer tout les Data en POST alors que c'est pas la même URL, et que j'ouvre une nouvelle fenêtre/onglet  ?

n°2217984
MaybeEijOr​Not
but someone at least
Posté le 29-01-2014 à 09:32:31  profilanswer
 

Ben je ne comprends pas trop ce que tu veux faire. La requête POST c'est pour passer des données d'un client vers un serveur, je ne sais si tu peux le faire autrement.

n°2218076
ordimans
Posté le 29-01-2014 à 22:50:11  profilanswer
 

Hum.
Là je veux pouvoir passer mes données de ma page 1 www.aaaa.fr
vers ma page 2 www.bbbb.com.
et avec le Get je vais vite être limité.

n°2218103
MaybeEijOr​Not
but someone at least
Posté le 30-01-2014 à 10:14:44  profilanswer
 

Actuellement ça fonctionne en GET? Tu fais comment? Car à part s'il y a une astuce avec Google je ne vois pas comment le client (c'est à dire n'importe qui) va pouvoir voir la page www.bbbb.com mise à jour sans faire d'étape.

n°2218197
ordimans
Posté le 30-01-2014 à 23:47:41  profilanswer
 

En Get ça fonctionne.
Je suis sur mon URL, mon script tourne, le gars clique sur un bouton.
On ouvre URL B avec les paramètres GET dedans.
Mon script sur le site B, décode les 4 5 paramètres, il traite si nécessaire. Et rempli tout.
 
Sauf qu'en gros là, je veux passer de 4/5 caractères par ligne sur mon site A à x8/10 soit autant de ligne.
ET en GET ça va péter.
 
Là j'ai trouvé ça :
-soit paramètres global GM, mais pas de tableau disponible donc ça va être chiant :o (quoi que avec des petits for et param+i ça doit se faire)
Mais faut que ce soit RAZ sinon ça va foutre la merde
-soit créer un iframe sur le site A, et à priori le site B peut accéder au données. mais je trouve rien dessus de bien complet
-et en POST bah c'est côté serveur donc c'est mort à priori. enfin même si c'est une page PHP de l'autre côté, on peut pas récupérer les infos en Javascript....
-stocker ça dans un fichier temp sur la machine peut être ?
 
Je prends n'importe quel idée, tant qu'elle sera pas trop couteuse.
Car par exemple passer tout par Google, ça va être long, premier site qui fout tout sur un spreadsheet, et second site qui récupère tout. L'appel à GS met 2 secondes à peu près....
 
Là j'ai une autre idée, c'est d'appeler x fois mon URL B en GET avec fermeture auto, et de le faire pour tout les lignes.
Mais bon c'est lourd :o, un appel avec tout les paramètres c'est quand même mieux.

n°2218205
MaybeEijOr​Not
but someone at least
Posté le 31-01-2014 à 09:27:27  profilanswer
 

Oui c'est ce que je dis, en Post je ne vois pas comment on pourrait faire car il faut modifier le header, or quand il va ouvrir la page il aura le header de base écrit par le navigateur.
 
Le cookie peut être une idée en le couplant à un iframe afin qu'il soit set sur le bon domain. Bon il sera juste considéré comme un tracking-cookie par contre.
 
Après y'a peut être des solutions de XMLHttpRequest avec un iframe, à creuser.

n°2218210
ordimans
Posté le 31-01-2014 à 09:55:39  profilanswer
 

A priori avec l'iFrame certains font discuter deux fenêtres.
Faut que je trouve une bonne explication du bordel.

n°2218224
MaybeEijOr​Not
but someone at least
Posté le 31-01-2014 à 11:16:10  profilanswer
 

Déjà tu peux faire une page avec une iframe :
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>Page d'essai</title>
  5. </head>
  6. <body>
  7.   <div id="test">
  8.    <iframe src="test2.html" scrolling="no" frameborder="0" height="0" width="0"></iframe>
  9.   </div>
  10. </body>
  11. </html>


 
 
test2.html :
 

Code :
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>Page d'essai</title>
  5.   <script type="text/javascript">
  6.    function go() {
  7.     window.top.document.getElementById('test').textContent = document.getElementById('container').textContent;
  8.    }
  9.   </script>
  10. </head>
  11. <body onLoad="go();">
  12.   <div id="container">TeSt</div>
  13. </body>
  14. </html>


 
 
Tu passes donc le contenu de la page en iframe dans la page courante, mais je ne sais pas si ça fonctionne en cross-domain (enfin je pense que non, ça serait trop simple autrement).


Message édité par MaybeEijOrNot le 31-01-2014 à 11:18:26
n°2218510
ordimans
Posté le 04-02-2014 à 10:56:21  profilanswer
 

Re
 
Bon j'ai réussi avec les variables Greasemonkey,ça marche pas trop mal.
Un peu de mal car j'avais mis mes GM_setValue dans le GM_xmlhttprequest qui était dans le look, et du coup ça marchait pas.
Car en faite le temps que Google réponde, le script continue, et donc, quand la première demande répondait, on fait le GM_setValue("test"+i,response), sauf que le i il est déjà au bout de la loop.
Du coup on faisait 8 fois le setValue avec test8 par exemple.
 
J'ai eu un peu de mal avec ça.
Et en créant une fonction rien que pour ça ça marche nickel. Je passe ma variable ou nom de variable à définir. Donc ça fait x appels de la fonction, mais ça marche nickel.
 
 
Bref dans quelques jours ça sera terminé.
 
Sinon autre question, y a une méthode pour compter le nombre d'occurrence rapidement ?
Genre liste déroulante, je veux le nombre d'occurrence qui contiennent CM.
J'ai fait ça, une boucle pour parcourt tout les éléments, et je test et incréments un compteur.
 
 

Code :
  1. for (j=0; j<listeAffaireBis.options.length;j++) {
  2.      if (listeAffaireBis.options[j].innerHTML.indexOf('CM') >= 0)   countCM++;
  3.                      }


Message édité par ordimans le 04-02-2014 à 10:57:09
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
décalage sur un tableau de byteVBA/PPT remplacer des données
Comparer deux listes en multicritèresl'échange des données entre une application c++ et application java
VBA - Copier données entre deux feuilles et restructurationTableau de réservations
Passage de données sans rafraichir la pageProblème reception données port serie
Etirer la formule de plusieurs lignes jusqu'en bas de mon tableau 
Plus de sujets relatifs à : Greasemonkey, traiter les données d'un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR