Access-Control-Allow-Origin erreur lors de l'envoi d'un jQuery publier sur Google API
J'ai lu beaucoup de choses pour le "Access-Control-Allow-Origin' erreur, mais je ne comprends pas ce que j'ai à résoudre 🙁
Je suis en train de jouer avec Google Modérateur de l'API, mais quand j'essaie de ajouter nouvelle série - je recevoir:
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 rappel paramètre, j'ai essayé d'ajouter "Access-Control-Allow-Origin: *' de l'en-tête. Et je ne sais pas comment utiliser $.getJSON ici, s'appliquer, parce que je dois ajouter l'en-tête d'Autorisation et je ne sais pas comment le faire sans beforeCall de $.ajax :/
Toute la lumière de cette obscurité u.u?
Que 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 -->
- pourriez-vous s'il vous plaît mettez votre code un peu plus? Je ne pouvais pas exécuter votre code.
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le Access-Control-Allow-Origin erreur en modifiant le paramètre de type de données à dataType:'jsonp' et l'ajout d'un crossDomain:vrai
crossDomain:true
est nécessaire. Ma compréhension est qu'il est seulement nécessaire si vous faites une demande sur votre propre domaine, mais que vous voulez jQuery à le traiter comme une demande de domaines.crossDomain
n'est pas nécessaire. c'est un régulierjsonp
demande qui est conçue pour la croix domaine de la communication.dataType: 'jsonp'
et cela a fonctionné à merveille!J'ai eu exactement le même problème et il n'était pas de la croix de domaine, mais le même domaine. Je viens d'ajouter cette ligne dans le fichier php qui a été la manipulation de la requête ajax.
Il a travaillé comme un charme. Grâce à l'affiche
Si vous avez cette erreur en essayant de consommer un service que vous ne pouvez pas ajouter l'en-tête
Access-Control-Allow-Origin *
dans cette application, mais vous pouvez mettre en avant du serveur proxy inverse, l'erreur peut être évitée avec un en-tête de réécriture.En supposant que l'application est en cours d'exécution sur le port 8080 (domaine public au http://www.mydomain.com), et vous mettez le reverse proxy dans le même hôte sur le port 80, c'est la configuration pour Nginx reverse proxy:
Access-Control-Allow-Origin: http://example.com
.Oui, du moment jQuery voit l'URL appartient à un autre domaine, il suppose que l'appel au domaine de la croix, fait appel à un
crossdomain:true
n'est pas nécessaire ici.Également important de noter que vous ne pouvez pas faire un appel synchrone avec
$.ajax
si votre URL appartient à un autre domaine (la croix de domaine) ou vous utilisez JSONP. Seuls les appels asynchrones sont autorisés.Remarque: vous pouvez appeler le service de façon synchrone si vous spécifiez le
async:false
avec votre demande.Dans mon cas, le sous-nom de domaine à l'origine du problème. Voici plus de détails
J'ai utilisé
app_development.something.com
, ici, le trait de soulignement(_
) sous-domaine est la création de la SCRO erreur. Après un changement deapp_development
àapp-development
il fonctionne très bien.