dataType:'jsonp',
Vous faites une demande JSONP, mais le serveur répond avec JSON.
Le navigateur refuse d'essayer de traiter le JSON en tant que JSONP car cela constituerait un risque pour la sécurité. (Si le navigateur a fait essayer de traiter le JSON comme JSONP, au mieux, cela échouerait).
Voir cette question pour plus de détails sur ce qu'est JSONP. Notez qu'il s'agit d'un piratage méchant pour contourner la politique de l'origine identique (Same Origin Policy) qui était utilisée avant que CORS ne soit disponible. CORS est une solution beaucoup plus propre, plus sûre et plus puissante au problème.
On dirait que vous essayez d'effectuer une demande d'origine croisée et que vous lui envoyez tout ce que vous pouvez imaginer en un tas massif d'instructions contradictoires.
Vous devez comprendre comment fonctionne la politique de la même origine.
Voir cette question pour un guide détaillé.
Maintenant, quelques remarques sur votre code :
contentType: 'application/json',
- Ceci est ignoré lorsque vous utilisez JSONP
- Vous faites une demande GET. Il n'y a pas de corps de requête pour décrire le type de .
- Cela rendra une requête d'origine croisée non simple, ce qui signifie qu'en plus des autorisations CORS de base, vous devrez également vous occuper d'un pré-vol.
Enlevez ça.
dataType:'jsonp',
- Le serveur ne répond pas avec JSONP.
Enlevez ça. (Vous pourriez faire en sorte que le serveur réponde avec JSONP à la place, mais CORS est mieux).
responseType:'application/json',
Cette option n'est pas prise en charge par jQuery.ajax. Supprimez-la.
xhrFields : { withCredentials : false },
Il s'agit de la valeur par défaut. A moins que vous ne le mettiez à true avec ajaxSetup, supprimez ceci.
headers: {
'Access-Control-Allow-Credentials' : true,
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'GET',
'Access-Control-Allow-Headers':'application/json',
},
- Ce sont des en-têtes de réponse. Ils doivent figurer dans la réponse, et non dans la demande.
- Cela rendra une requête d'origine croisée non simple, ce qui signifie qu'en plus des autorisations CORS de base, vous devrez également vous occuper d'un pré-vol.
4 votes
Il semble que l'API que vous appelez n'ait pas activé les en-têtes nécessaires pour permettre les appels inter-domaines depuis JS. Vous devrez probablement effectuer l'appel sur le serveur à la place. Êtes-vous sûr que la réponse est JSONP et non JSON ordinaire ? Notez également que les en-têtes que vous ajoutez dans la requête doivent être placés dans le champ réponse du serveur.
4 votes
Avez-vous résolu cette erreur ou cet avertissement CORB ? Je rencontre le même problème avec le module de demande.
5 votes
@SherwinAblañaDapito si vous êtes toujours à la recherche d'une solution, voir ma réponse pour les environnements de développement/test
1 votes
Pour démontrer pour que votre JS puisse fonctionner correctement, vous pouvez lancer Chrome en mode non sécurisé chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security Mais "Read Blocking (CORB) blocked cross-origin response" (blocage de lecture) doit être corrigée du côté du serveur.