Как отобразить данные AJAX в цикл while? - PullRequest
1 голос
/ 31 октября 2019

Я выбрал несколько марок автомобилей в цикле while, а затем для каждой марки я делаю меню выбора для имен автомобилей в другом цикле while, используя «идентификатор бренда» в качестве внешнего ключа. И затем я хочу показывать названия автомобилей в поле каждый раз, когда кто-то меняет раскрывающиеся опции выбора. Вот мой код ниже:

$query = "SELECT * FROM brands";
$result = $db->query($query);

// Outer while loop
while($row = $result->fetch(PDO::FETCH_OBJ)){
    $brand_id = $row->id;
    ?>

    <div id="result"></div>  <!-- The Ajax result will be shown here -->

    <div><?php echo $row->brand_name ?></div>
    <?php

    $query2 = "SELECT * FROM cars WHERE brand_id = ?";
    $result2 = $db->prepare($query);
    $result2->execute(array($brand_id));

    <select name="car" id="car">
       // Inner while loop
       while($row2 = $result2->fetch(PDO::FETCH_OBJ)){
          ?>
          <option value="<?php echo $row2->id ?>"><?php echo $row2->car_name ?></option>
          <?php
        }  // Closing Inner while loop
    ?>
    </select>

        <!-- Ajax -->
        <script>
            $(document).ready(function(){

                $('#car').change(function(e){
                    e.preventDefault();
                    var car = $(this).val();
                    $.ajax({
                        url: "ajax.php",
                        type: "post",
                        data: {car: car},
                        success: function(data){
                            $('#result').html(data);
                        }
                    });
                });

            });
        </script>
     <?php
      }  // Closing outer while loop

В ajax.php я написал следующий код, чтобы повторить имя машины

$carName = $_POST['car'];
echo $carName;

Но проблема в том, что он выполняется только дляпервый вариант выбран внутри первого внутреннего цикла первого внешнего цикла. Я имею в виду, что код ajax запускается только для первой итерации обоих циклов.

Я также попытался сделать меню выбора и результат div уникальным, добавив «идентификатор бренда» следующим образом:

<div id="result<?php echo $brand_id ?>"></div>

и

<select name="car" id="car<?php echo $brand_id ?>">
    <option value="<?php echo $row2->id ?>"><?php echo $row2->car_name ?></option>
</select>

, а также ajax, как указано ниже:

       $('#car<?php echo $brand_id ?>').change(function(e){
            e.preventDefault();
            var car = $(this).val();
            $.ajax({
                url: "ajax.php",
                type: "post",
                data: {car: car},
                success: function(data){
                    $('#result<?php echo $brand_id ?>').html(data);
                }
        });

Но это не сработало. Пожалуйста, предложите ваши лучшие возможные решения. Спасибо.

Ответы [ 3 ]

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

Попробуйте мой код

$query = "SELECT * FROM brands";
$result = $db->query($query);

// Outer while loop
while($row = $result->fetch(PDO::FETCH_OBJ)){
    $brand_id = $row->id;
    ?>

    <div id="result<?php echo $brand_id;?>"></div>  <!-- The Ajax result will be shown here -->

    <div><?php echo $row->brand_name ?></div>
    <?php

    $query2 = "SELECT * FROM cars WHERE brand_id = ?";
    $result2 = $db->prepare($query);
    $result2->execute(array($brand_id));

    // Inner while loop
    while($row2 = $result2->fetch(PDO::FETCH_OBJ)){
        ?>
        <select name="car[]" id="car<?php echo $row2->id ?>">
            <option value="<?php echo $row2->id ?>"><?php echo     $row2->car_name ?></option>
        </select>

        <!-- Ajax -->
        <script>
            $(document).ready(function(){

                $('#car<?php echo $row2->id ?>').change(function(e){
                    e.preventDefault();
                    var car = $(this).val();
                    $.ajax({
                        url: "ajax.php",
                        type: "post",
                        data: {car: car},
                        success: function(data){
console.log(data);
                            $('#result<?php echo $brand_id;?>').html(data);
                        }
                    });
                });

            });
        </script>

        <?php
      }
    }
0 голосов
/ 31 октября 2019

Вам не нужно вызывать ajax () в цикле while. Просто вы можете позвонить .change() на

<select name="car" onchange="getCar(this.value)"> 



<script type="text/javascript">
    function getCar(car) {            
        $.ajax({
            url: "ajax.php",
            type: "post",
            data: {car: car},
            success: function(data){
                $('#result').html('');
                $('#result').html(data);
            }
        });
    }
</script>


<div id="result"></div>
0 голосов
/ 31 октября 2019

Код select и ajax должен быть вне цикла while. просто проверьте код ниже

<?php $query = "SELECT * FROM brands";
$result = $db->query($query);

// Outer while loop
while($row = $result->fetch(PDO::FETCH_OBJ)){
    $brand_id = $row->id;
    ?>

    <div id="result"></div>  <!-- The Ajax result will be shown here -->

    <div><?php echo $row->brand_name ?></div>
    <?php

    $query2 = "SELECT * FROM cars WHERE brand_id = ?";
    $result2 = $db->prepare($query);
    $result2->execute(array($brand_id)); ?>

    <select name="car" id="car">

        <?
       // Inner while loop
       while($row2 = $result2->fetch(PDO::FETCH_OBJ)){
          ?>
          <option value="<?php echo $row2->id ?>"><?php echo $row2->car_name ?></option>
          <?php
        }  // Closing Inner while loop
    ?>
    </select>

        <!-- Ajax -->
        <script>
            $(document).ready(function(){

                $('#car').change(function(e){
                    e.preventDefault();
                    var car = $(this).val();
                    $.ajax({
                        url: "ajax.php",
                        type: "post",
                        data: {car: car},
                        success: function(data){
                            $('#result').html(data);
                        }
                    });
                });

            });
        </script>
     <?php
      }  // Closing outer while loop

      ?>


``
...