11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Suite à de fil de discussion
Je découvre un problème dans l'utilisation de ma fonction
Le code

async function GetRemoteData(url, data, whenDone, args){
	fetch(url, {method: 'POST', body: JSON.stringify(data)})
		.then(response => {
			if(!response.ok) {
				const address = url.replace(/^.*\/html/, '');
				throw response.statusText + ' : ' + address;
			}
			console.log(response);
			return response.text();
		})
		.then(text => whenDone(text, args))
		.catch(error => alert('Error: ' + error + ' ' + url));
}

Cette fonction n'utilise pas response.json, car les informations reçues du serveur ne sont pas toujours des objets décrits en json, même si c'est très souvent le cas, je préfère décoder le texte dans la fonction asynchrone appelée.
.then(text => whenDone(text, args))

Néanmoins je reçois des alertes sur le fait que la chaîne reçue n'est pas une description correcte d'un objet json et la fonction asynchrone n'est pas appelée.
Par exemple
Error: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data /html/getMenu.php

Que faut-il faire pour éviter ces détections d'erreurs intempestives ?
En fait les erreurs détectées dans la fonction appelée sont également traitées par
.catch(error => alert('Error: ' + error + ' ' + url));
et dans ce cas particulier la fonction appelée effectuait bien un
JSON.parse(data)
contrairement à ce que je pensais. L'erreur n'est donc pas "intempestive", mais je ne m'attendais pas à ce qu'elle soit remontée à la fonction appelante, ce qui est pourtant parfaitement logique.
Smiley confused
Modifié par PapyJP (19 Jan 2023 - 11:37)