Как использовать значение из текстового поля с OnChange в новой функции? - PullRequest
0 голосов
/ 14 декабря 2018

Вот что я пытаюсь сделать:

  1. Я получаю значение из PHP и помещаю его в текстовое поле (функция 1).Это отлично работает.
  2. Я пытаюсь использовать это значение в другом запросе PHP (функция 2).Не работает нормально.

Обе функции должны запускаться при загрузке страницы и должны оставаться в отдельных функциях.Проблема: переменная результата первой функции не может быть найдена во второй.Как я пытался указать внутри кода, переменная «seizoen» остается пустой во второй функции.Есть идеи, что я делаю не так или как я могу решить это?

<input type="text" id="Seizoen_text" OnChange="getCompetitie()>

<select id="Competitie_list"></select>

window.onload = function() {
    getSeizoen();    
    getCompetitie();
};

function getSeizoen() {
    $.ajax({
        type:'POST',
        url:'get_seizoen.inc.php',
        dataType: 'json', 
        success: function(response){
            var maxseizoen = response[0]['MaxSeizoen'];
            $("#Seizoen_text").val(maxseizoen);
        }
    });
}

function getCompetitie() {
    seizoen = $("#Seizoen_text").val();
    alert(seizoen);  //  **--> EMPTY !**
    $.ajax({
        type:'POST',
        url:'get_competitie.inc.php',
        dataType: 'json', 
        data: {seizoen: seizoen},
        success: function(response){
            $("#Competitie_list").empty();
            var len = response.length;
            for(var i = 0; i < len; i++){
                var competitievorm = response[i]['Competitie'];
                $("#Competitie_list").append("<option value='"+competitievorm+"'>"+competitievorm+"</option>");
            }
        }
    });
}

1 Ответ

0 голосов
/ 14 декабря 2018

Проблема, вероятно, в асинхронных вызовах.

То, что происходит, - getSeizoen() вызывается при загрузке окна, но при этом выполняется вызов ajax.В то время как вызов ajax выполняется на сервере, в это время также вызывается getCompetitie().

В getCompetitie() вы заполняете переменную seizoen = $("#Seizoen_text").val();, но текстовое поле, вероятно, еще не имеет значения (так какэто асинхронный вызов).

Я бы предложил удалить вызов getCompetitie() из события window.load и вызвать его после завершения первого ajax.Есть несколько способов сделать это, но вы можете сделать что-то вроде:

function getSeizoen()
{
    $.ajax({
        type:'POST',
        url:'get_seizoen.inc.php',
        dataType: 'json', 
        success: function(response){
            var maxseizoen = response[0]['MaxSeizoen'];
            $("#Seizoen_text").val(maxseizoen);
            getCompetitie(); // added call here on success
        }
    });
}
...