使用jquery.ajax POST的Mturk externalQuestion:Access-Control-Allow-Origin错误

时间:2016-05-23 00:08:40

标签: javascript jquery mechanicalturk

我正在使用亚马逊机械土耳其人(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。

我不知道为什么我会遇到这个跨域“Access-Control-Allow-Origin”问题。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

我与亚马逊的乐于助人的人接触,他们回答说:

  

嗨本 -

     

我认为问题在于您的代码正试图获取   用户的浏览器向亚马逊提交AJAX请求。自页面   这个代码是由您自己的应用程序在Heroku上生成的   浏览器默认情况下不允许这样做(从一个调用AJAX调用   域名到另一个)。

     

解决方案是让代码执行表单提交,而不是AJAX提交。   请参阅此处提交的JQuery表单文档:   https://api.jquery.com/submit/

     

请告诉我这是否适合您。

     

谢谢,Taneem

以下是提交代码:

  <rb.Modal.Footer>
    <form name="mturk_form" method="post" id="mturk_form" action={self.props.userData.submitTo + "/mturk/externalSubmit"}>
      <input type="hidden" value='' name="assignmentId" id={self.props.userData.assignmentId}/>
      <rb.Input type="submit" style={{width:'70%', float: "left"}}/>
      <rb.Button onClick={self.props.closeSubmit}>Cancel</rb.Button>
    </form>