J'essaie d'appeler la fonction fetch()
.
Cela fonctionne bien sur iOS mais ne fonctionne pas sur Android.
fetch('https://admin.leanpoint.com/Api/User/[email protected]', {
method: 'POST',
headers: {
'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
},
})
.then((res) => {
res.json().then((json) => {
alert(JSON.stringify(json))
})
})
.catch((err) => {
alert(JSON.stringify(err))
})
Sur iOS, il entre .then()
mais sur Android, il entre .catch()
et err
est {}
.
Il ne fonctionne pas non plus sur Emulator et sur le périphérique réel.
Toute aide est appréciée. ^ _ ^
Journal des erreurs avec Axios
Quand j'ai utilisé fetch()
, il entre .catch()
avec {}.
J'ai essayé avec Axios
comme ci-dessous.
axios.post('https://admin.leanpoint.com/Api/User/[email protected]', null, {
headers: {
'Authorization': 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE='
},
timeout: 2000
})
.then((res) => {
console.log(res.data)
})
.catch((err) => {
console.log(err)
})
Et cela retourne une erreur comme ci-dessous.
{ [Error: Network Error]
config:
{ adapter: [Function: xhrAdapter],
transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
timeout: 2000,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
headers:
{ Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/x-www-form-urlencoded',
Authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
method: 'post',
url: 'https://admin.leanpoint.com/Api/User/[email protected]',
data: null },
request:
{ UNSENT: 0,
OPENED: 1,
HEADERS_RECEIVED: 2,
LOADING: 3,
DONE: 4,
readyState: 4,
status: 0,
timeout: 2000,
withCredentials: true,
upload: {},
_aborted: false,
_hasError: true,
_method: 'POST',
_response: 'Java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.',
_url: 'https://admin.leanpoint.com/Api/User/[email protected]',
_timedOut: false,
_trackingName: 'unknown',
_incrementalEvents: false,
responseHeaders: undefined,
_requestId: null,
_cachedResponse: undefined,
_headers:
{ accept: 'application/json, text/plain, */*',
'content-type': 'application/x-www-form-urlencoded',
authorization: 'Basic c3JpbnVAbWFpbnBvaW50LmRrOnNhaWJhYmE=' },
_responseType: '',
_sent: true,
_lowerCaseResponseHeaders: {},
_subscriptions: [] },
response: undefined }
Le second journal pointe votre erreur. Le problème est le certificat SSL. Voir ce post pour la solution:
Ancrage de confiance introuvable pour la connexion SSL Android
Dans trace traceback, vous pouvez voir que Java CertPathValidatorException
bloque la demande du réseau et vérifiez ceci réponse sous Android
_ {"I Am Batman"} _ suggère de faire appel à Axios . Axios est beaucoup plus simple et s’avère fonctionner de manière cohérente sur ios/Android au lieu de donner à utiliser ces erreurs bizarres. Voici l'exemple d'une requête POST directement à partir de leur github:
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});