AJAX не вызывает предустановленную функцию, используя PDO для извлечения из базы данных - PullRequest
0 голосов
/ 16 октября 2019

Наличие этой части в форме HTML, работа в PHP для серверной части. Требуется, чтобы пользователь выбрал страну, и в зависимости от страны список городов уточняется только для городов данной страны. AJAX обновляет и передает переменные, но функция PHP не запускает:

// PHP part
$action = "all";

if (isset($_POST['action'])) {
    $action = $_POST['action'];
}

if (isset($_GET['action'])) {
    $action = $_GET['action'];
}
<label class="form-text" id="further-details-labels" for="country">Country:</label>
    <select onchange="getCountry(this.value)" class="form-control country" name="country" id="country">
        <?php
        echo "<option value=\"\">Please select Country</option>";
        foreach ($model->getCountry() AS $countries => $country) {
            echo "<option value={$country['country_code']}>{$country['country_name']}</option>";
        }
        ?>
    </select>

    <label class="form-text" id="further-details-labels" for="city">City:</label>
    <select class="form-control" name="city" id="further-details-input">
        <option value="">Please select City</option>
        <?php
        switch ($action) {
            case "all": 
                $model = new model();
                foreach ($model->getCity() AS $cities => $city) {
                    echo "<option value={$city['city_code']}>{$city['city_name']}</option>";
                } 
            break;
            case 'country': 
                $country = $_POST['country']; 
                $model = new model();
                foreach ($model->getCityByCountry($country) as $cities => $city) {
                    echo "<option value={$city['city_code']}>{$city['city_name']}</option>";
                } 
            break;// to continue switch statement and add ajax calls
        }
        ?>
    </select>

AJAX

<script type="text/javascript">
// TODO fetching script for onchange
function getCountry(country_code) {
    if (window.XMLHttpRequest) {
        var xhr = new XMLHttpRequest();
    } else {
        var xhr = new ActiveObject("Microsoft.XMLHTTP");
    }
    xhr.onreadystatechange = function() {
        if(this.readyState == 4 && this.status == 200) {
            var country = {"country": country_code};
            console.log(country);
            var test = document.getElementById("test");
//                    test.innerHTML=this.responseText;
        }

    };
    xhr.open("POST","details.php", true);
    xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
    xhr.send("action=country&country="+country);
};
</script>

Любое предложение о том, как их соединить, чтобы сделать опции выбораизменить в зависимости от сработавшей функции, пожалуйста?

1 Ответ

0 голосов
/ 17 октября 2019

Вам необходимо проверить $action перед печатью остальной части формы, а не внутри формы. Если это all, вы печатаете всю форму, если это country, вы просто печатаете параметры страны.

<?php
switch ($action) {
case "all":
    ?>
    <label class="form-text" id="further-details-labels" for="country">Country:</label>
    <select onchange="getCountry(this.value)" class="form-control country" name="country" id="country">
        <?php
        echo "<option value=\"\">Please select Country</option>";
        foreach ($model->getCountry() AS $countries => $country) {
            echo "<option value={$country['country_code']}>{$country['country_name']}</option>";
        }
        ?>
    </select>

    <label class="form-text" id="further-details-labels" for="city">City:</label>
    <select class="form-control" name="city" id="further-details-input">
        <option value="">Please select City</option>
        <?php
        $model = new model();
        foreach ($model->getCity() AS $cities => $city) {
            echo "<option value={$city['city_code']}>{$city['city_name']}</option>";
        }
        ?>
    </select>
        <?php
        break;

case 'country': 
    $country = $_POST['country']; 
    $model = new model();
    foreach ($model->getCityByCountry($country) as $cities => $city) {
        echo "<option value={$city['city_code']}>{$city['city_name']}</option>";
    } 
    break;// to continue switch statement and add ajax calls
}

Тогда в коде AJAX функция обратного вызова должна выполнить:

document.querySelector("select[name=city]").innerHTML = this.responseText;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...