#javascript
#javascript
Вопрос:
Когда я отправил свой внешний запрос на Mturk, кнопка отправки не работает. Я был бы признателен, если бы кто-нибудь мог мне помочь с этим. Однако данные сохраняются на моем сервере. Вот мой код:
<div id="instruction3" class="instructions" style="display:none">
survey questions here
<a href="javascript:SaveData()" id="finalSubmit" type="submit" value="Submit">Submit</a>
</div>
function SaveData() {
(some code here)
d = {
"trialStruct": trialStruct,
"critStruct": critStruct
};
console.log(d)
SendToServer(curID, d);
}
<form action="https://workersandbox.mturk.com/mturk/externalSubmit" id="mturk_form" method="post" name="mturk_form">
<input id="assignmentId" name="assignmentId" type="hidden" value="" />
<p><input id="submitButton" type="submit" value="Submit" /></p>
</form>
function SendToServer(id, curData) {
$.ajax({
type : "POST",
url : "https://xxxxxxxxxxxx/turk/save.php",
data : { json : JSON.stringify(curData) },
success : function(data) {
document.forms[0].submit();
}
});
}
Отредактировано: поток должен быть таким, чтобы участники нажимали на кнопку отправки, и данные сохранялись и отправлялись на страницу externalSubmit. Это части кода из Mturk, которые мне нужно реализовать в моем коде, и, возможно, я делаю это неправильно.
<!-- HTML to handle creating the HIT form -->
<form action="https://workersandbox.mturk.com/mturk/externalSubmit" id="mturk_form" method="post" name="mturk_form">
<input id="assignmentId" name="assignmentId" type="hidden" value="" />
<!-- HTML to handle submitting the HIT -->
<p><input id="submitButton" type="submit" value="Submit" /></p>
</form>
Комментарии:
1. Может быть, опубликовать больше кода? Из того, что я вижу, вы не используете эту функцию. Вы можете добавить an
onsubmit
в форму и добавить эту функцию. Поэтому измените ее на:<form action="https://workersandbox.mturk.com/mturk/externalSubmit" id="mturk_form" method="post" name="mturk_form" onsubmit="SendToServer()">
. Я не уверен, как устанавливаются данные, поэтому трудно сказать, но вы можете выяснить, как включить их в функцию2. Я добавил больше кода. Дайте мне знать, если есть что-то еще, что я могу добавить, чтобы помочь разобраться в проблеме. Спасибо!
Ответ №1:
Вы должны вызвать функцию SaveData() внутри тега формы
<form action="https://workersandbox.mturk.com/mturk/externalSubmit" id="mturk_form" method="post" name="mturk_form" onSubmit="SaveData()">
Ответ №2:
Поэтому я думаю, вам следует попытаться переместить SaveData
функцию в onSubmit
значение формы. Таким образом, вы отправляете форму, и данные будут сохранены на сервере. У вас есть дополнительный html-код выше, но я думаю, что это лишнее для того, что вы пытаетесь сделать.
function SaveData() {
(some code here)
d = {
"trialStruct": trialStruct,
"critStruct": critStruct
};
console.log(d)
SendToServer(curID, d);
}
function SendToServer(id, curData) {
$.ajax({
type : "POST",
url : "https://xxxxxxxxxxxx/turk/save.php",
data : { json : JSON.stringify(curData) },
success : function(data) {
document.forms[0].submit();
}
});
}
<form action="https://workersandbox.mturk.com/mturk/externalSubmit" id="mturk_form" method="post" name="mturk_form" onSubmit="SaveData()">
<input id="assignmentId" name="assignmentId" type="hidden" value="" />
<p><input onclick="window.location.href = https://workersandbox.mturk.com/mturk/externalSubmit';"id="submitButton" type="submit" value="Submit" /></p>
</form>
Комментарии:
1. Извините, HTML-код сверху содержит некоторые вопросы опроса, которые я удалил здесь, потому что он был слишком длинным. Итак, как только участники нажимают на кнопку отправки, данные должны быть сохранены, и они будут перенаправлены на внешний URL отправки.
2. Итак, после отправки формы вы также хотите перенаправить?
3. Да, это правильно. Я добавил некоторую информацию в исходное сообщение. Есть некоторый код из Mturk, который мне нужно использовать, но я предполагаю, что я неправильно его реализую.
4. Так что, может быть, я ошибаюсь, но в функции сохранения данных, если вы отправляете форму, вы просто делаете «окно». location.assign’ для изменения маршрута. Не сохраняются ли данные на сервере при добавлении функции сохранения в форму отправки?
5. Не уверен, правильно ли я понимаю, но вы имеете в виду мою функцию SaveData в id=»finalSubmit»? В моей текущей реализации данные сохраняются, но не перенаправляются на URL.
Ответ №3:
Вот рабочий, который я использовал https://postman-echo.com/post просто чтобы убедиться, что это работает.
function SaveData() {
var d = {
"trialStruct": trialStruct,
"critStruct": critStruct
};
console.log(d);
SendToServer(curID, d);
}
function SendToServer(id, curData) {
$.ajax({
type: "POST",
url: "https://postman-echo.com/post",
data: {
json: JSON.stringify(curData)
},
success: function(data) {
$("#mturk_form").submit();
}
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="instruction3" class="instructions" style="display:none">
<a href="javascript:SaveData()" id="finalSubmit" type="submit" value="Submit">Submit</a>
</div>
<form action="https://postman-echo.com/post" id="mturk_form" method="post" name="mturk_form">
<input id="assignmentId" name="assignmentId" type="hidden" value="" />
<p><input id="submitButton" type="submit" value="Submit" /></p>
</form>