Pages :
(reprise du message précédent)

Si j'ai la liste des balises potentiellement remplissables, ça ne me dis pas laquelle.
Pour faire un appendChild, il faut avoir le parentNode de cette balise, même problème, il faut passer une info.
On peut mettre la balise target dans une variable globale, mais si je fais ça je ne peux pas lancer plusieurs requêtes en parallèles: à quoi cela sert il d'avoir de l'asynchrone si on ne peut pas paralléliser les requêtes?
Mmmm, on pourrait attribuer un id en plus de la class pour être sur de différencier vu que tu n'es pas adepte du JQuery. Et passer la value/attribut désiré dans la fonction avec un évènement onclick

La target est la même à chaque fois aussi apparemment c'est "_blank".
Enfin si j'ai bien compris ton problème c'est une piste probable
Essaie cette méthode. On enlève les href et passe sur des boutons

<input type="button" value="button name" onclick="window.open('http://www.website.com/page')" />
Modérateur
étrange, en effet Safari mobile à une époque avait désactivé les requêtes synchrones (mais pas asynchrones)

Concernant la propriété ajoutée à l'objet, c'est une mauvaise pratique en plus d'être inutile ici:

function DataInclude(target, url){
	var xhr = new XMLHttpRequest();
	target.style.display = 'none';
	xhr.onreadystatechange = function() {
		if(this.readyState == 4 && this.status == 200) {
			target.innerHTML = this.responseText;
			target.style.display = '';
		}
	}
	xhr.open('GET', url);
	xhr.send(null);
}

Si dans un an, 5 ans, la spec js change et implémente une propriété «target» en lecture seule, ton code ne fonctionnera plus.
kustolovic a écrit :
Concernant la propriété ajoutée à l'objet, c'est une mauvaise pratique en plus d'être inutile ici
Si dans un an, 5 ans, la spec js change et implémente une propriété «target» en lecture seule, ton code ne fonctionnera plus.

Je suis bien d'accord que ce n'est pas le pied, mais je n'ai trouvé nulle part une meilleure façon de faire.
Je suis preneur de toute solution qui permette d'éviter de devoir écrire autant de fonctions que de balises susceptibles d'être remplies par une requête AJAX asynchrone.
En attendant, je constate que seules les requêtes synchrones semblent permettre de faire ce dont j'ai besoin. Mais les requêtes synchrones sont aussi considérées comme de "mauvaises pratiques" et lèvent des warning de la part des navigateurs.
Modérateur
J'ai corrigé ton code dans ma réponse précédente pour s'en affranchir Smiley smile

En javascript un namespace des variables définies par var (ou en attribut) est créé pour chaque fonction mais elle hérite des variables définies dans la fonction parente pour autant qu'elles ne soient pas redéfinies.

var a = 1;
function b(){ var a=2; console.log(a); }
b(); // => 2
console.log(a);  // => 1
function c(){ console.log(a); }
c(); // => 1
function d(){ a = a+5; }
d();
console.log(a);  // => 6

Modifié par kustolovic (29 Aug 2018 - 19:49)
Meilleure solution
Merci Kusto
J’y ai pensé également hier soir. La question que je me pose, c’est ce qui se passe quand on a plusieurs requêtes en parallèle. Ce n’est pas facile à tester. Je vais essayer pour voir ce que ça donne.
Sinon on peut toujours faire en sorte que ce que renvoie le serveur contienne ce qu’il faut pour que la fonction de rappel retrouve ses petits.
Modérateur
Il n'y a pas de problème de ce côté là, chaque appel de la fonction crée un nouveau contexte d’exécution. Et la valeur de l'attribut target est propre au contexte d'exécution.
Modifié par kustolovic (30 Aug 2018 - 09:47)
Tu as certainement raison... mais si le script fonctionne très bien sur Firefox, il ne fonctionne toujours pas sur Safari/iPad.
Je suis revenu aux requêtes synchrones. Smiley bawling
Ça marche!! Smiley biggrin
C'était un problème de cache sur la tablette: le fichier de script était celui d'hier.
Merci Kusto! Smiley clapclap
Modifié par PapyJP (30 Aug 2018 - 17:13)
Pages :