Access-Control-Allow-Origin-Fehler beim Senden eines jQuery-Posts an Google APIs



1 Answers

Ich hatte genau das gleiche Problem und es war nicht Cross-Domain, sondern die gleiche Domain. Ich habe gerade diese Zeile zu der PHP-Datei hinzugefügt, die die Ajax-Anfrage bearbeitet hat.

<?php header('Access-Control-Allow-Origin: *'); ?>

Es hat wie ein Zauber funktioniert. Danke an das Poster

Question

Ich habe viel gelesen für den 'Access-Control-Allow-Origin'-Fehler, aber ich verstehe nicht, was ich beheben muss :(

Ich spiele mit Google Moderator API, aber wenn ich versuche, eine neue Serie hinzuzufügen, erhalte ich:

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.

Ich probierte mit und ohne Callback-Parameter, ich habe versucht, 'Access-Control-Allow-Origin *' zum Header hinzuzufügen. Und ich weiß nicht, wie man $ .getJSON hier benutzt, wenn es angewendet wird, weil ich den Berechtigungsheader hinzufügen muss und ich nicht weiß, wie man es ohne beforeCall von $ .ajax macht: /

Irgendein Licht für diese Dunkelheit, Uu?

Das ist der 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 -->



Ja, in dem Moment, in dem jQuery sieht, dass die URL zu einer anderen Domäne gehört, geht sie davon aus, dass der Aufruf als crossdomain:true Aufruf, also crossdomain:true hier nicht erforderlich ist.

Beachten Sie auch, dass Sie keinen synchronen Aufruf mit $.ajax wenn Ihre URL zu einer anderen Domäne (domänenübergreifend) gehört oder Sie JSONP verwenden. Nur Async-Aufrufe sind erlaubt.

Hinweis: Sie können den Dienst synchron aufrufen, wenn Sie mit Ihrer Anfrage async:false angeben.




Related