Voila le code
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
var htmlResp = xmlHttp.responseText
if(/(\/forums\/42.*?\.htm)"/.test(htmlResp))
var s = htmlResp;
var re = s.match(/(\/forums\/42.*?\.htm)"/g);
for (i=0; i<re.length;i++) {
var postOuRequest = new XMLHttpRequest();
postOuRequest.onreadystatechange = function() {
if (postOuRequest.readyState == 4 && postOuRequest.status == 200)
var htmlPostOu = postOuRequest.responseText
console.log(htmlPostOu)
xmlHttp.open("GET", "http://www.jeuxvideo.com"+re[i], true);
xmlHttp.send(null);
}
}
}
xmlHttp.open("GET", document.URL, true);
xmlHttp.send(null);
Pour pas vous perdre voila mon objectif : Parser la page des topics puis envoyer une requete a chaque lien trouvé qui va me donner un contenu de la page (ça va changer je veut mettre une condition)
mais ça marche pas et j'ai 3 erreurs
Première erreur : Uncaught TypeError: Cannot read property 'match' of undefined
at XMLHttpRequest.xmlHttp.onreadystatechange (<anonymous>:7:14)
at <anonymous>:21:9
La deuxieme et troisième erreur prennent du temps à arriver ce qui signifie que le script a fonctionner
2 : Uncaught TypeError: Cannot read property 'match' of undefined
at XMLHttpRequest.xmlHttp.onreadystatechange (<anonymous>:7:14)
3 : Uncaught TypeError: Cannot read property 'match' of undefined
at XMLHttpRequest.xmlHttp.onreadystatechange (<anonymous>:7:14)
Enfaîte c'est bizarre car selon l'erreur s est une valeur indefini et je ne sais pas pourquoi
si vous avez des pistes je suis disponible
merci d'avance
Tu as oublié les accolades à tes if
voila le code corrigé
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var htmlResp = xmlHttp.responseText
if(/(\/forums\/42.*?\.htm)"/.test(htmlResp))
var s = htmlResp;
var re = s.match(/(\/forums\/42.*?\.htm)/g);
for (i=0; i<re.length;i++) {
var postOuRequest = new XMLHttpRequest();
postOuRequest.onreadystatechange = function() {
if (postOuRequest.readyState == 4 && postOuRequest.status == 200) {
var htmlPostOu = postOuRequest.responseText
console.log(htmlPostOu)
}
}
xmlHttp.open("GET", "http://www.jeuxvideo.com"+re[i], true);
xmlHttp.send(null);
}
}
}
xmlHttp.open("GET", document.URL, true);
xmlHttp.send(null);
maintenant dans la console chrome ça me retourne juste undefined ça ne fait pas le resultat que je veut (console.log(htmlPostOu)
donc que devrais je faire
if(/(\/forums\/42.*?\.htm)"/.test(htmlResp))
Pas d'ouverture des accolades, voulu ? Là seule la ligne suivante sera faite de manière conditionnelle, et tu utilises la valeur affectée ensuite. Mauvais plan.
var htmlPostOu = postOuRequest.responseText
console.log(htmlPostOu)
Avec des points virgules ça risque pas de faire de mal.
Pour le reste, je suis pas sûr d'avoir saisi le but du code. Mais si t'as ce genre de bug le console.log tu peux l'utiliser ailleurs, autant faire du débug de A à Z.
Le 26 mars 2017 à 16:09:49 GrandeGuerre a écrit :
if(/(\/forums\/42.*?\.htm)"/.test(htmlResp))
Pas d'ouverture des accolades, voulu ? Là seule la ligne suivante sera faite de manière conditionnelle, et tu utilises la valeur affectée ensuite. Mauvais plan.var htmlPostOu = postOuRequest.responseText console.log(htmlPostOu)
Avec des points virgules ça risque pas de faire de mal.
Pour le reste, je suis pas sûr d'avoir saisi le but du code. Mais si t'as ce genre de bug le console.log tu peux l'utiliser ailleurs, autant faire du débug de A à Z.
la condition j'ai hésité à l'enlever car je voulais pas que mon script s'enclenche n'importe ou mais du coup ta raison elle sert a rien je vais l'enlever
sinon pour les accolades et les points virgule c'est ma faute juste car j'avais pas trop touché au code depuis longtemps du coup on perd les habitudes
sinon merci pour ces explications
Sinon je vais refaire un résumer de l'objectif
imaginons que je suis sur cette page :
https://www.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm
Je vais donc envoyer une requête quête pour obtenir une forme brute du code source
ensuite je récupère le lien de tout les topics
Et a ce stade je pense que j'aurais pu me faciliter la tache avec ça :
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(responseText,"text/xml");
var tds = xmlDoc.getElementsByTagName("td");
Et j'ai décidé de garder les regex pour récupérer les liens
Ensuite avec les liens menant au topic je refait une requête pour chaque lien ainsi je pourrait obtenir le contenu de chaque topic (et moi j'ai envie de vérifier si un message est présent ou non depuis la liste des sujets)
j'ai fait ce code
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var htmlResp = xmlHttp.responseText;
var parser=new DOMParser();
var xmlDoc=parser.parseFromString(htmlResp,"text/xml");
console.log(xmlDoc);
var cell = xmlDoc.getElementsByClassName("lien-jv topic-title");
for (i=0; i<cell.length + 1; i++) {
console.log(cell[i]);
}
}
}
xmlHttp.open("GET", document.URL,true); // true for asynchronous
xmlHttp.send(null);
et dans la console de commande CHROME je trouve qu'il y a une erreur (parse error)
si vous avez une idée d'ou ça peut provenir je suis ouvert