CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Javascript probleme

nektos
nektos
Niveau 10
26 mars 2017 à 11:38:38

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

WatchItBurn
WatchItBurn
Niveau 10
26 mars 2017 à 13:26:14

Tu as oublié les accolades à tes if

nektos
nektos
Niveau 10
26 mars 2017 à 13:42:26

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

GrandeGuerre
GrandeGuerre
Niveau 11
26 mars 2017 à 16:09:49
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. :hap:

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.

nektos
nektos
Niveau 10
26 mars 2017 à 16:18:09

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. :hap:

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

Message édité le 26 mars 2017 à 16:21:21 par nektos
nektos
nektos
Niveau 10
26 mars 2017 à 16:35:53

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

:d) 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)

nektos
nektos
Niveau 10
28 mars 2017 à 19:58:17

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) https://image.noelshack.com/fichiers/2017/13/1490723861-6b7f513bf62.png

si vous avez une idée d'ou ça peut provenir je suis ouvert

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment