在某些情况下,没有“Access-Control-Allow-Origin”标头错误,但在其他情况下则没有

时间:2014-12-03 20:22:14

标签: javascript post cross-domain

我知道有很多关于这方面的问题。我看了他们中的大部分。服务器必须返回带有所述标头的响应,允许我的来源对其进行请求。

然而,有些事情我不明白。我正在创建一个简单的Stash插件,在单击按钮时执行发布请求。

我有这个错误。好。但为什么帖子请求有效?帖子是启动构建并启动构建。我仍然有错误,所以在客户端,我显示一条消息,说明构建没有启动...

更奇怪的是,我有一位同事做了一个简单的Chrome扩展程序做同样的事情,并且错误没有显示在浏览器控制台中......

我想明白为什么我的失败和他的成功。

My Stash插件javascript代码:

require(['jquery', 'stash/api/util/state'], function ($, pageState) {
var url = "https://build.company.org:8443/trigger";
var commit = pageState.getCommit();
var repo = pageState.getRepository()

$.post(
    url,
    {
        'code': '9b73fccb6c839d',
        'workflow.repourl': 'ssh://git@stash.company.org:7999/' + repo.project.key + "/" + repo.name,
        'workflow.reponame': repo.project.key + "/" + repo.name,
        'workflow.revision': commit.id,
        'workflow.user': commit.author.name,
        'workflow.message': commit.message
    },
    function (data) {
        AJS.messages.success("#launch-build-message", {
          fadeout: true,
          delay: 5000,
          title: "Success!",
          body: "The build was<br>successfully launched!"
        });
    }
).fail(function () {
    AJS.messages.error("#launch-build-message", {
        fadeout: true,
        delay: 5000,
        title: "Error!",
        body: "The build could not<br>be launched!"
    });
});
});

他的Chrome扩展程序javascript:

var build_status_div = $('div.build-status-summary');

var rebuild_div = $('<div class="plugin-item"></div>').insertAfter(build_status_div);
var rebuild_a = rebuild_div.append('<a href=""><span class="aui-icon aui-icon-small aui-iconfont-build" title="Launch another build"></span><span class="label">Launch another build</span></a>');
var success_div = $('<div class="plugin-item build-result build-success"><span>Build started !</span></div>').insertAfter(rebuild_div);
var failure_div = $('<div class="plugin-item build-result build-failure"><span>Could not start the build.</span></div>').insertAfter(success_div);
success_div.hide();
failure_div.hide();

rebuild_a.click(function(ev) {
ev.preventDefault();

$.post(
    'https://build.company.org:8443/trigger',
    {
        'code': '9b73fccb6c839d',
        'property:workflow.repourl': 'ssh://git@stash.company.org:7999/Project_1/Rep_1,
        'property:workflow.reponame': 'Project_1/Rep_1,
        'property:workflow.revision': 'dbc5de00a675996df25cebb6c3cce7fad39247b9',
        'workflow.user': 'Some User',
        'workflow.message': 'test'
    },
    function (data) {
        success_div.fadeIn().delay(5000).fadeOut();
    }
).fail(function () {
    failure_div.fadeIn().delay(5000).fadeOut();
});
});

1 个答案:

答案 0 :(得分:1)

  

我有一位同事做了一个简单的Chrome扩展程序

Chrome扩展程序是显式安装在浏览器中的软件。他们被授予从其他网站读取数据的许可。

您访问的任意页面上的JavaScript会获得更多限制访问权限。如果您想使用XMLHttpRequest访问另一个来源,该来源必须使用CORS授予您的网站权限。