【发布时间】:2016-05-23 00:08:39
【问题描述】:
我正在使用 Amazons Mechanical Turk (Mturk) 并尝试将作业提交为已完成,以便可以向工人展示下一个 HIT。
我使用 externalQuestion,我的服务器存储了工作人员输入的所有数据。工作人员完成后,他们单击提交按钮,该按钮发送以下 POST:
$.ajax({
url: self.props.userData.turkSubmitTo + '/mturk/externalSubmit',
data: {assignmentId:self.props.userData.assignmentId},
type: 'POST',
success: function(resp) { console.log('good');},
error: function(resp, err) { console.log('fail'); console.log(resp); console.log(err);}
});
不幸的是,我收到以下错误:
XMLHttpRequest cannot load https://workersandbox.mturk.com/mturk/externalSubmit?assignmentId=3AMYWKA6YBMSYVY7OGYPJIPCGPK6OK. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://shrouded-plains-8041.herokuapp.com' is therefore not allowed access.
请注意,如果我使用 dataType 'jsonp' 发布以尝试解决这个明显的跨域问题,则提交工作正常,但 externalQuestion iframe 不会刷新到下一个 HIT。
我不知道为什么我会遇到这个跨域“访问控制允许来源”问题。有什么帮助吗?
【问题讨论】:
-
请在网络上搜索该错误。它一天来这里很多次。至于使用 jsonp 你不能使用
POST和 jsonp 因为它是一个脚本请求而不是 ajax。简短的回答是,如果可能,您需要在 api 上启用 CORS 或使用代理 -
好的,谢谢!是的,我确实做了很多谷歌搜索。这对 jsonp 很有意义,以及为什么它不能按预期工作。我无权访问 api 来启用 COR。我想它必须是一个代理。亚马逊的 Mturk 需要一个代理来执行这个相当标准的操作,这似乎很奇怪(而奇怪的是我问这个问题的原因)。任何有 Mturk 经验的人都可以评论吗?
标签: javascript jquery mechanicalturk