2016-05-23 3 views
1

Я использую Amazons Mechanical Turk (Mturk) и пытаюсь отправить задание как полное, чтобы работнику был показан следующий HIT.Mturk externalQuestion с jquery.ajax POST: Ошибка доступа-разрешения-ошибки Origin

Я использую 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. 

Обратите внимание, что, если я отправляю с типом данных «JSONP», чтобы попытаться обойти эту кажущуюся проблему междоменного доступа, тогда подача будет прекрасной, но внешний ifrimeQuestion не обновится до следующего HIT.

Я не уверен, почему я получаю этот перекрестный домен «Контроль доступа-Разрешить-Происхождение». Любая помощь, пожалуйста?

+0

Пожалуйста, веб-поиска для этой ошибки. Он появляется здесь много раз в день. Что касается использования jsonp, вы не можете использовать 'POST' и jsonp, поскольку это запрос скрипта не ajax. Короткий ответ: вам нужно включить CORS на api, если возможно, или использовать прокси – charlietfl

+0

Хорошо спасибо! Да, я сделал сумму проезда в Интернете. Это имеет смысл в jsonp, и почему это не работает должным образом. У меня нет доступа к api для включения COR. Я предполагаю, что тогда это будет прокси. Кажется странным, что Mturk Amazon требует прокси-сервера для выполнения этой довольно стандартной операции (и эта странность - вот почему я задаю этот вопрос). Может ли кто-нибудь с Mturk прокомментировать комментарий? – Yetti

ответ

1

я получил в контакте с услужливым народом в Амазонке, и они ответили:

Hi Ben -

I believe the problem is that your code is attempting to get the user's browser to submit an AJAX request to Amazon. Since the page with this code is being generated by your own app on Heroku, the browser does not allow this by default (making AJAX calls from one domain to another).

The solution is to have the code do a form submit, not an AJAX submit. See documentation for JQuery's form submit here: https://api.jquery.com/submit/ .

Let me know if that works for you.

Thanks, 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>