向Google API发送jQuery Post时出现Access-Control-Allow-Origin错误

| 我读了很多有关“ Access-Control-Allow-Origin”错误的信息,但我不明白我该如何解决:( 我正在使用Google Moderator API,但是当我尝试添加新的系列时,收到以下消息:
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 * \'添加到标题中。而且我不知道如何在这里使用$ .getJSON(如果有的话),因为我必须添加Authorization标头,并且不知道没有$ .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 -->
    
已邀请:
我解决了将dataType参数修改为dataType:\'jsonp \'并添加crossDomain:true的Access-Control-Allow-Origin错误
$.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
});
    
我有完全相同的问题,它不是跨域的,而是相同的域。我只是将此行添加到正在处理ajax请求的php文件中。
<?php header(\'Access-Control-Allow-Origin: *\'); ?>
它像魅力一样运作。多亏了海报     
如果您在尝试使用无法在该应用程序中添加标头
Access-Control-Allow-Origin *
的服务时遇到此错误,但可以在服务器前放置反向代理,则可以通过重写标头来避免该错误。 假设应用程序在端口8080(公共域位于www.mydomain.com)上运行,并且您将反向代理放在端口80的同一主机上,这是Nginx反向代理的配置:
server {
    listen      80;
    server_name www.mydomain.com;
    access_log  /var/log/nginx/www.mydomain.com.access.log;
    error_log   /var/log/nginx/www.mydomain.com.error.log;

    location / {
        proxy_pass   http://127.0.0.1:8080;
        add_header   Access-Control-Allow-Origin *;
    }   
}
    
是的,当jQuery看到URL属于另一个域时,它假定该调用为跨域调用,因此此处不需要ѭ6。 另外,请务必注意,如果URL属于另一个域(跨域)或使用JSONP,则不能使用ѭ7进行同步调用。仅允许异步调用。 注意:如果您在请求中指定
async:false
,则可以同步调用该服务。     
就我而言,子域名引起了问题。这是细节 我使用
app_development.something.com
,这里的下划线(
_
)子域正在创建CORS错误。将
app_development
更改为
app-development
后,它可以正常工作。     
php有一点技巧。它不仅适用于Google,而且适用于您无法控制且无法添加Access-Control-Allow-Origin的任何网站* 我们需要在我们的网络服务器上创建PHP文件(例如getContentFromUrl.php),并做一些技巧。 的PHP
<?php

$ext_url = $_POST[\'ext_url\'];

echo file_get_contents($ext_url);

?>
JS
$.ajax({
    method: \'POST\',
    url: \'getContentFromUrl.php\', // link to your PHP file
    data: {
        // url where our server will send request which can\'t be done by AJAX
        \'ext_url\': \'https://stackoverflow.com/questions/6114436/access-control-allow-origin-error-sending-a-jquery-post-to-google-apis\'
    },
    success: function(data) {
        // we can find any data on external url, cause we\'ve got all page
        var $h1 = $(data).find(\'h1\').html();

        $(\'h1\').val($h1);
    },
    error:function() {
        console.log(\'Error\');
    }
});
怎么运行的: 您的浏览器将在JS的帮助下将请求发送到您的服务器 您的服务器将向其他任何服务器发送请求,并从其他服务器(任何网站)获得回复 您的服务器会将此回复发送给您的JS 我们可以使事件onClick,将此事件放在某个按钮上。 希望这会有所帮助!     

要回复问题请先登录注册