首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向Google API发送jQuery帖子时出现访问控制允许来源错误

向Google API发送jQuery帖子时出现访问控制允许来源错误
EN

Stack Overflow用户
提问于 2011-05-25 01:31:07
回答 4查看 631.7K关注 0票数 145

我读了很多关于'Access-Control-Allow-Origin‘错误的文章,但我不明白我必须修复什么:(

我正在玩谷歌版主应用程序接口,但当我尝试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 *‘。我不知道如何在这里使用$.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 -->
EN

回答 4

Stack Overflow用户

发布于 2012-10-10 19:24:12

我有完全相同的问题,它不是跨域的,而是相同的域。我只是将这一行添加到处理ajax请求的php文件中。

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

它就像一个护身符一样有效。多亏了海报

票数 42
EN

Stack Overflow用户

发布于 2012-04-13 01:30:28

是的,当jQuery发现URL属于不同的域时,它会假设该调用是跨域调用,因此这里不需要crossdomain:true

此外,重要的是要注意,如果您的URL属于不同的域(跨域)或者您正在使用$.ajax,则不能使用JSONP进行同步调用。只允许异步调用。

注意:如果您在请求中指定了async:false,则可以同步调用服务。

票数 6
EN

Stack Overflow用户

发布于 2020-09-07 13:57:10

在JavaScript中试用我的代码

 var settings = {
              "url": "https://myinboxhub.co.in/example",
              "method": "GET",
              "timeout": 0,
              "headers": {},
            };
        $.ajax(settings).done(function (response) {
          console.log(response);
            if (response.auth) { 
                console.log('on success');
            } 
        }).fail(function (jqXHR, exception) { 
                var msg = '';
                if (jqXHR.status === '(failed)net::ERR_INTERNET_DISCONNECTED') {
                    
                        msg = 'Uncaught Error.\n' + jqXHR.responseText; 
                }
                if (jqXHR.status === 0) {
                        msg = 'Not connect.\n Verify Network.';
                } else if (jqXHR.status == 413) {
                        msg = 'Image size is too large.'; 
                }  else if (jqXHR.status == 404) {
                        msg = 'Requested page not found. [404]'; 
                } else if (jqXHR.status == 405) {
                        msg = 'Image size is too large.'; 
                } else if (jqXHR.status == 500) {
                        msg = 'Internal Server Error [500].'; 
                } else if (exception === 'parsererror') {
                        msg = 'Requested JSON parse failed.'; 
                } else if (exception === 'timeout') {
                        msg = 'Time out error.'; 
                } else if (exception === 'abort') {
                        msg = 'Ajax request aborted.'; 
                } else {
                        msg = 'Uncaught Error.\n' + jqXHR.responseText; 
                }
                console.log(msg);
        });;

在PHP中

header('Content-type: application/json');
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET");
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6114436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档