jquery - 将 jQuery Post 发送到 Google API 时出现访问控制允许来源错误

标签 jquery ajax google-api cors jsonp

我阅读了很多有关“Access-Control-Allow-Origin”错误的信息,但我不明白我必须修复什么:(

我正在使用 Google Moderator API,但是当我尝试 add new serie我收到:

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.

我尝试使用和不使用回调参数,我尝试将“Access-Control-Allow-Origin *”添加到 header 。而且我不知道如何在这里使用 $.getJSON,如果适用的话,因为我必须添加 Authorization header ,而且如果没有来自 $.ajax 的 beforeCall,我不知道该怎么做:/

你有什么能照亮这黑暗的光吗?

这是代码:

<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 -->

最佳答案

我解决了 Access-Control-Allow-Origin 错误,将 dataType 参数修改为 dataType:'jsonp' 并添加了一个 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
});

关于jquery - 将 jQuery Post 发送到 Google API 时出现访问控制允许来源错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114436/

相关文章:

javascript - AJAX 权限在 IE 上被拒绝?

java - 基于设备状态的位置更新

Node.js:Google Analytics API:如何使用 "service account"发出授权的只读管理 API 请求?

google-api - 使用相同控制台应用程序的 Gmail REST API 和 Gmail IMAP 的 API 配额

javascript - jquery UI datepicker 的多个日期输入

javascript - 如何防止按钮点击默认

java - 通过 Ajax 请求的 Servlet 流

php - 将 JSON 数据发送到 PHP 服务器(本地主机到托管站点)

javascript - 是否可以通过 ajax 从 php 返回 javascript 函数?

jquery - 更改类 :before selector with jquery to animate underscoring