Запустить функцию JS после проверки формы при нажатии кнопки - PullRequest
1 голос
/ 04 августа 2020

У меня 2 JS функций; первый function1 отправляет информацию на сервер сценарию python после нажатия кнопки в форме. Вторая функция, function2, переходит на следующий уровень страницы (НЕ на следующую страницу HTML, это многостраничная форма на одной HTML странице).

В настоящий момент я используя функцию onClick на моей кнопке: onClick="function1();" и JQuery. Если одна из трех записей остается пустой, форма проверяет и предлагает пользователю заполнить пустые поля.

Как заставить function2 дождаться успешного выполнения function1 со всей действительной формой записей и отсутствия ошибок со сценарием python (сценарий python возвращает '', 204, поэтому после запуска страницы не происходит никаких изменений, поэтому для этого вопроса это не так важно).

Ниже это мои сценарии JS функций; любые советы приветствуются.

<script>
  form = document.getElementById("formID");

  function function1() {
    form.action = "/runPythonFunc";
    form.submit();
    // JQuery validates the form to make sure all entries are filled
    // How do I make function2 wait now until all the entries have been filled by the user?
    function2('page2')
  }
</script>



<script language="JavaScript">
  var currentLayer = 'page1';

  function function2(lyr) {
    hideLayer(currentLayer);
    document.getElementById(lyr)
      .style.visibility = 'visible';
    currentLayer = lyr;
  }

  function hideLayer(lyr) {
    document.getElementById(lyr).
    style.visibility = 'hidden';
  }

  function showValues(form) {
    var values = '';
    var len = form.length - 1;
    //Leave off Submit Button
    for (i = 0; i < len; i++) {
      if (form[i].id.indexOf("C") != -1 ||
        form[i].id.indexOf("B") != -1)
        //Skip Continue and Back Buttons
        continue;
      values += form[i].id;
      values += ': ';
      values += form[i].value;
      values += '\n';
    }
    alert(values);
  }
</script>

ОБНОВЛЕНИЕ:

Я пытался работать с AJAX, и у меня есть несколько разных методов, с которыми я работал, ни один из которых еще работали. Специфика каждого метода упоминается в виде комментариев в приведенном ниже коде:

Первый способ

<script>
   function function1() {

    $.ajax({
      url: '/runPythonFunc',
      type: 'POST',
      data: {
        email: $('#User-Email').val(),
        entryTwo: $('#EntryTwo').val(),
        entryThree: $('#EntryThree').val()
      },
      success: function2('page2') { // getting error in this line "Syntax error: unexpected token '{'"
        return '', 204;
      }
    });
  }
  // Getting the error:     Uncaught ReferenceError: metaSQL is not define at HTMLInputElement.onclick
</script>

Вышеупомянутый первый способ дает эти ошибки в инструментах разработки (для пояснения, metaSQL is my function1 , and разновидности1` - это идентификатор записи на странице 2 формы (то, с чем мы не имеем дело в этом вопросе)

enter image description here

Second way


  function function1() {

    return $.ajax({
      url: '/runPythonFunc',
      type: 'POST',
      data: {
        email: $('#User-Email').val(),
        entryTwo: $('#EntryTwo').val(),
        entryThree: $('#EntryThree').val()
      }
    });
  }

  function1().then(response => function2('page2'));  // not sure what to replace 'response ' with
  // Getting the error:     Uncaught ReferenceError: metaSQL is not define at HTMLInputElement.onclick
  // Also the error: Uncaught ReferenceError: $ is not defined, and Mixed Content: The page was loaded over HTTPS, but requested an insecure script 'http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js'. This request has been blocked; the content must be served over HTTPS.

Is there an ideal way between the two options above, or an entirely different way to use AJAX in my case?

Additional code, HTML form:

 Введите свой адрес электронной почты 
Как вы назовете свой алгоритм?
Кратко опишите, что делает ваш алгоритм?


Добавить животное 1-е животное Какое животное вы ищете? . . .

Ура

Дополнительная информация (снимок экрана devtool) по запросу пользователя @Alwaysa и код python (с использованием Flask framework) ниже. Чтобы избежать путаницы, meta2sql совпадает с `

введите описание изображения здесь

@app.route('/runPythonFunc', methods=['GET', 'POST'])
def runPythonFunc():
    #function does work
    return '', 204

Ответы [ 2 ]

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

попробуйте

async function function1() {
    form.action = "/runPythonFunc";
    await form.submit();
    function2('page2');
}
0 голосов
/ 05 августа 2020

Go шаг за шагом .... Удалите все, кроме div с идентификатором page1, и запустите ajax при нажатии кнопки (также удалите onClick="metaSQL(); из кнопки). Затем опубликуйте результат, полученный из console.log (данные).

<script>
    $(document).ready(function () {
        $("#C1").click(function () {
            $.ajax({
                url: '/runPythonFunc',
                type: 'POST',
                data: {
                    email: $('#User-Email').val(),
                    entryTwo: $('#Algorithm-Name').val(),
                    entryThree: $('#Algorithm-Desc').val()
                },
                success: function (data, status, jqXHR) { 
                    console.log(data);
                }
            });
        });
    });
</script>




<div id="page1" class="page" style="visibility:visible;">    
    <!-- USER EMAIL -->    
    <label for="Algorithm-Name-3" class="custom-question algorithm-name">Enter your email<br></label><input type="text" class="text-field enter-name w-input" maxlength="256" name="User-Email" data-name="User Email" placeholder="Email address"                                                                                                               id="User-Email" required="">    
    <!-- ALGORITHM NAME -->    
    <label for="Algorithm-Name-3" class="custom-question algorithm-name">What will you name your algorithm?<br></label><input type="text" class="text-field enter-name w-input" maxlength="256" name="Algorithm-Name" data-name="Algorithm Name"                                                                                                                                   placeholder="Be as creative as you like!" id="Algorithm-Name" required="">    
    <!-- ALGORITHM DESCRIPTION -->    
    <label for="Algorithm-Desc-3" class="custom-question algorithm-desc">Briefly describe what your algorithm does?<br></label><input type="text" class="text-field enter-name w-input" maxlength="256" name="Algorithm-Description"                                                                                                                                           data-name="Algorithm Description" placeholder="You can still be creative!" id="Algorithm-Desc" required="">   
    <br><br>    
    <p><input type="submit" class="submit-button-2 w-button" id="C1" value="Add Animal" onClick="metaSQL();"></p>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...