публикация в механический турк из внешнего вопроса (форма angular) не выполняется или ничего не делает - PullRequest
0 голосов
/ 04 августа 2020

У меня есть внешнее приложение angular, которое используется как внешний вопрос в AWS Mechanical Turk. У меня есть форма в этом приложении angular, и я пытаюсь отправить ее в соответствии с документацией AWS: документация внешней формы .

Цель, насколько я понимаю это отправить форму по этому адресу:

https://workersandbox.mturk.com/mturk/externalSubmit?assignmentId=...

Когда я пытаюсь использовать http-клиент для отправки сообщений на этот адрес, например:

HTML:

<form (ngSubmit)="onSubmit()">
...
<button mat-raised-button color="primary" type="submit">Submit</button>
</form>

TS, в onSubmit:

// submit to mturk
this.http.post(`https://workersandbox.mturk.com/mturk/externalSubmit?assignmentId=${this.currentAssignmetID[0]}`, {
assignmentId: this.currentAssignmetID[0]
}).subscribe(data => {
console.log('data from submit to mturk: ', data);
});

Я получаю ошибку CORS.

Когда я читал об этом проблема, у меня возникла идея, что Mechanical Turk ждет, пока iframe "перенаправит" на этот адрес, а не отправит внешний HTTP-запрос.

Поэтому я изменил файл HTML на этот:

<form [formGroup]="qualifierForm" [action]="postExternalURl" method="POST">

...

и имел переменную postExternalURl для хранения внешнего URL.

Теперь проблема в том, что ничего не происходит. Я вижу загруженное приложение, заполняю форму и нажимаю «Отправить» - и я не получаю никаких указаний на то, что что-то происходит, а в моей песочнице запрашивающего я не вижу зарегистрированных назначений. Может ли кто-нибудь пролить свет на эту проблему? Почему не удается отправить заявку? И вообще - что мне нужно сделать в этом случае - форма angular - чтобы отправить свое задание как работника?

Спасибо

1 Ответ

0 голосов
/ 09 августа 2020

Я решил проблему и отправляю решение для всех, кто может использовать его, если они столкнутся с той же ситуацией, что и я.

Форма HTML. Чтобы эта форма работала как внешний вопрос в механическом турке (по крайней мере, по моему опыту), форма должна быть в стиле старой школы html, а не angular форма реактивного стиля.

Определение формы в моем случае должно быть:

<form  #form ngNoForm [formGroup]="formName" [action]="postExternalURl" method="post">

Теперь, чтобы механический турк зарегистрировал отправку, метод form.submit () (вы можете заменить «form» с тем, как вы назвали # в строке определения формы) должен быть вызван. Вы можете сделать это прямо с помощью кнопки отправки:

<button mat-raised-button color="primary" type="submit"
                                    [disabled]="!formName.valid" (click)="form.submit()">Submit</button>

Но если вам нужно использовать больше logi c перед отправкой формы, вы можете изменить определение кнопки в HTML на:

<button mat-raised-button color="primary" type="submit"
                                [disabled]="!formName.valid" (click)="onSubmit(form)">Submit</button>

И в вызове метода onSubmit «form.submit ()».

И все. Когда я загрузил эту форму как внешний вопрос в Mechanical Turk, отправка работала правильно.

...