J'ai beaucoup lu pour l'erreur 'Access-Control-Allow-Origin', mais je ne comprends pas ce que je dois corriger :(
Je joue avec l'API Google Moderator, mais lorsque j'essaie d' ajouter une nouvelle série, je reçois:
XMLHttpRequest cannot load
https://www.googleapis.com/moderator/v1/series?key=[key]
&data%5Bdescription%5D=Share+and+rank+tips+for+eating+healthily+on+the+cheaps!
&data%5Bname%5D=Eating+Healthy+%26+Cheap
&data%5BvideoSubmissionAllowed%5D=false.
Origin [my_domain] is not allowed by Access-Control-Allow-Origin.
J'ai essayé avec et sans paramètre de rappel, j'ai essayé d'ajouter 'Access-Control-Allow-Origin *' à l'en-tête. Et je ne sais pas comment utiliser $ .getJSON ici, si cela s'applique, car je dois ajouter l'en-tête Authorization et je ne sais pas comment le faire sans beforeCall de $ .ajax: /
Une lumière pour cette obscurité uu?
C'est le code:
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
var scope = "https://www.googleapis.com/auth/moderator";
var token = '';
function create(){
if (token == '')
token = doCheck();
var myData = {
"data": {
"description": "Share and rank tips for eating healthily on the cheaps!",
"name": "Eating Healthy & Cheap",
"videoSubmissionAllowed": false
}
};
$.ajax({
url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
type: 'POST',
callback: '?',
data: myData,
datatype: 'application/json',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); },
beforeSend: setHeader
});
}
function setHeader(xhr) {
xhr.setRequestHeader('Authorization', token);
}
function doLogin(){
if (token == ''){
token = google.accounts.user.login(scope);
}else{
alert('already logged');
}
}
function doCheck(){
token = google.accounts.user.checkLogin(scope);
return token;
}
</script>
...
...
<div data-role="content">
<input type="button" value="Login" onclick="doLogin();">
<input type="button" value="Get data" onclick="getModerator();">
<input type="button" value="Create" onclick="create();">
</div><!-- /content -->
Réponses:
J'ai résolu l'erreur Access-Control-Allow-Origin en modifiant le paramètre dataType en dataType: 'jsonp' et en ajoutant un crossDomain: true
la source
crossDomain:true
soit nécessaire. Je crois comprendre que cela n'est nécessaire que si vous faites une demande sur votre propre domaine mais que vous souhaitez que jQuery la traite comme une demande inter-domaines.crossDomain
n'est pas nécessaire. il s'agit d'unejsonp
demande régulière destinée à une communication interdomaine.J'ai eu exactement le même problème et ce n'était pas un domaine croisé mais le même domaine. Je viens d'ajouter cette ligne au fichier php qui traitait la requête ajax.
Ça a marché comme sur des roulettes. Merci à l'affiche
la source
Si vous rencontrez cette erreur en essayant de consommer un service dont vous ne pouvez pas ajouter l'en-tête
Access-Control-Allow-Origin *
dans cette application, mais que vous pouvez placer un proxy inverse devant le serveur, l'erreur peut être évitée avec une réécriture d'en-tête.En supposant que l'application fonctionne sur le port 8080 (domaine public sur www.mondomaine.com ) et que vous placez le proxy inverse dans le même hôte au port 80, voici la configuration du proxy inverse Nginx :
la source
Access-Control-Allow-Origin: http://example.com
.Oui, au moment où jQuery voit que l'URL appartient à un domaine différent, il suppose que l'appel est un appel interdomaine, donc
crossdomain:true
n'est pas nécessaire ici.De plus, il est important de noter que vous ne pouvez pas passer un appel synchrone avec
$.ajax
si votre URL appartient à un domaine différent (domaine croisé) ou si vous utilisez JSONP. Seuls les appels asynchrones sont autorisés.Remarque: vous pouvez appeler le service de manière synchrone si vous spécifiez le
async:false
avec votre demande.la source
Dans mon cas, le sous-nom de domaine pose problème. Voici les détails
J'ai utilisé
app_development.something.com
, ici le_
sous-domaine underscore ( ) crée une erreur CORS. Après avoir changéapp_development
àapp-development
cela fonctionne très bien.la source
Il y a un petit hack avec php. Et cela fonctionne non seulement avec Google, mais avec tout site Web que vous ne contrôlez pas et ne pouvez pas ajouter Access-Control-Allow-Origin *
Nous devons créer un fichier PHP (ex. GetContentFromUrl.php ) sur notre serveur Web et faire une petite astuce.
PHP
JS
Comment ça fonctionne:
Et nous pouvons créer des événements onClick, mettre cet événement sur un bouton. J'espère que cela aidera!
la source