Как я могу исправить мою кнопку отправки Mturk? Она не работает

#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>