Access-Control-Allow-Origin-feil ved sending av en jQuery-post til Googles API-er

Jeg leste mye for ' Access-Control-Allow-Origin ' feil, men jeg forstår ikke hva jeg må fikse:(

Jeg spiller med Google Moderator API, men når jeg prøver å legge til ny serie mottar jeg:

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.

Jeg prøvde med og uten tilbakeringingsparameter, jeg prøvde å legge til 'Access-Control-Allow-Origin *' til overskriften. Og jeg vet ikke hvordan jeg skal bruke $ .getJSON her, hvis det gjelder, fordi jeg må legge til autorisasjonsoverskriften, og jeg vet ikke hvordan jeg gjør det uten beforeCall fra $ .ajax :/

Noe lys for dette mørket u.u?

Det er koden:

<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 -->
Løsning

Jeg løste Access-Control-Allow-Origin-feilen ved å endre dataType-parameteren til dataType:'jsonp' og legge til en crossDomain:true.

$.ajax({

    url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
    data: myData,
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    success: function() { alert("Success"); },
    error: function() { alert('Failed!'); },
    beforeSend: setHeader
});
Kommentarer (10)

Jeg hadde nøyaktig det samme problemet, og det var ikke kryssdomene, men det samme domenet. Jeg har nettopp lagt til denne linjen i php-filen som håndterte ajax-forespørselen.

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

Det fungerte som en sjarm. Takk til plakaten

Kommentarer (2)

Ja, i det øyeblikket jQuery ser at URL-en tilhører et annet domene, antar den at anropet er et anrop på tvers av domener, slik at crossdomain:true ikke er nødvendig her.

Det er også viktig å merke seg at du ikke kan foreta et synkront kall med $.ajax hvis nettadressen din tilhører et annet domene (kryssdomene) eller du bruker JSONP. Bare asynk-kall er tillatt.

Merk: Du kan kalle tjenesten synkront hvis du spesifiserer async:false med forespørselen din.

Kommentarer (0)