С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 1

Асинхронные запросы

28.02.2024, 02:13. Показов 496. Ответов 2
Метки ajax, php (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Помогите, пожалуйста понять, есть файл, в котором находится список животных и их пород.
Необходимо сделать выпадающие списки, где в одном списке, при выборе животного, например, кота, во втором выпадающем списке, был выбор только из кошачьих пород.
Я так понимаю, что необходимо использовать ассинхронные запросы, но никак не выходит.
Помогите разобраться, пожалуйста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
echo "<form id='animalsForm' action='' method='POST'>";
 
        $file = fopen("animals.csv", 'r');
        $rowCount = 0;
        $cityColumnArray = array();
        while(false !== ($rowData = fgetcsv($file))) {
            if($rowCount >= 0 && $rowCount <= count($petColumnArray)){
                array_push($petColumnArray, $rowData[5]);
            }
            $rowCount = $rowCount + 1;
        }
        fclose($file);
 
        if(isset($_POST['poroda']) && isset($_POST['pet']))
        {
        $optionSelect = $_POST['pet'];
        $optionSelect1 = $_POST['poroda'];
        $petColumnArray = array();
        echo "<table>\n\n";
        $file = fopen("animals.csv", "r");
        
        
        while (($data = fgetcsv($file)) !== false) {
            echo "<tr>";
            foreach ($data as $i) {
                if ($optionSelect == $data[5] && $optionSelect1 == $data[6])
                {
                    echo "<td>   " . htmlspecialchars($i) . "   </td>";
                }
            }
            echo "</tr> \n";
        }
        fclose($file);
        echo "\n</table>";
        }
     
        
        if(isset($_POST['pet'])) {
            $optionSelect = $_POST['pet'];
            $porodaColumnArray = array();
            $file1 = fopen("animals.csv", "r");
            while (($data = fgetcsv($file1)) !== false) {
                if ($optionSelect == $data[5])
                {
                    array_push($porodaColumnArray, $data[6]);
                }
            }
            fclose($file1);
        }
            echo "<label for='pet'>Выберите питомца:</label>
                 <select class='pet' id='pet' name='pet' onchange='checkField(this.value)'>
                 <option selected>Select</option>";
            
            $proglang = array_unique($cityColumnArray);
            foreach($proglang as $item) {
                echo "<option value='$item'>$item</option>";
            }
            echo '</select>';
     
     
     
        echo $_POST['pet'].'<br>'.$pet;
 
        if(isset($_POST['pet']))
        {
            echo '<label for="poroda">Выберите породу:</label>
                 <select id="poroda" name="poroda" onchange="checkField(this.value)">
                 <option selected>Select</option>';
 
            $proglang1 = array_unique($porodaColumnArray);
            foreach($proglang1 as $item1){
                echo "<option value='$item1'>$item1</option>";
            }
            echo '</select>';
        }
     
        echo $_POST['poroda'].'<br>';
?>
 
        </form><hr>
            <center>
                <h1>Данные файла</h1>
                    <table>
 
<?php
        echo "\n\n";
        $file = fopen("animals.csv", "r");
        while (($data = fgetcsv($file)) !== false) {
            echo "<tr>";
            foreach ($data as $i) {
                echo "<td>" . htmlspecialchars($i) . "</td>";
            }
            echo "</tr> \n";
        }
        fclose($file);
        echo "\n";
?>
                 
                    </table>
            </center><hr>
         
         
    <script>
    function checkField(val) {
        document.getElementById('animalsForm').submit()
    }
    </script>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2024, 02:13
Ответы с готовыми решениями:

Асинхронные запросы CURL
Здравствуйте. Есть ли возможность в PHP делать асинхронные запросы с помощью CURL, не дожидаясь, пока придет ответ от предыдущего запроса?...

Асинхронные запросы, многопоточность PHP
Есть websocket сервер, к которому подключается несколько клиентов. От каждого может исходить несколько запросов в секунду. Все это...

Асинхронные запросы или сокеты?
Добрый день. Нужен ваш совет. Начну с того что данные я вывожу из БД асинхронно. Но тут дело такое, диалоговое окно клиента с...

2
Невнимательный
 Аватар для ft4l
2840 / 1270 / 358
Регистрация: 08.02.2013
Сообщений: 7,400
Записей в блоге: 2
28.02.2024, 13:46
Цитата Сообщение от gahrenad Посмотреть сообщение
необходимо использовать ассинхронные запросы
это когда типа javascrict отправляет запрос на сервер типа такого
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
error_reporting(-1);
ini_set('display_errors', 1);
 
$CSV = __DIR__ . "/animals.csv";
const PET = 5;
const SPEC = 6;
 
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_keys($_POST) == ['pet']) {// ajax
    header('Content-Type: application/json; charset=utf-8');
    $res = ['error'=>1, 'data'=>[]];
     do {   
        $q = is_string($_POST['pet']) ? preg_replace('/\W+/u', '', $_POST['pet']): '';
        if (!$q) break;
        if (!($file = @fopen($CSV, 'r'))) break;
        while(false !== ($row = fgetcsv($file))) {
            if ($row[PET] != $q) continue;
            $res['data'][] = $row[SPEC];
        }
        $res['error'] = 0;// no error
    } while (0);
 
    echo json_encode($res);
    exit;
}
 
header('Content-Type: text/html; charset=utf-8');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {// other POST
    echo "<pre> POST запрос:\n\$_POST = ", htmlentities(var_export($_POST,1), ENT_NOQUOTES,'UTF-8'),
        "</pre>\n";
}
?>
    <script>
    function checkField(el) {
        if (el.getAttribute('name') == 'poroda') {
            el.parentNode.submit();
            return;
        }
        const myRequest = new Request(document.location);
            fetch(myRequest, {
                method: "POST",
                body: "pet="+el.value,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded"
                }
            }).then((response) => {
                if (response.ok) {
                    return response.json();
                }
                throw new Error(`HTTP error! Status: ${response.status}`);
             }).then((data) => {
                    if (data.error) throw new Error(`error: ${data.error}`);
                    let el2 = document.getElementById('poroda');
                    el2.innerHTML = '<option selected>Select</option>';
                    for (let x in data.data) {
                        el2.innerHTML += `<option value="${data.data[x]}">${data.data[x]}</option>`;
                    }
              }).catch((error) => console.error(error));
    }
  </script>
<?php
$ARR = [];
do {
    if (!($file = fopen($CSV, 'r'))) break;
    while(false !== ($row = fgetcsv($file))) {
        $ARR[$row[PET]] = '';
    }
    $ARR = array_keys($ARR);
} while (0);
 
if (!$ARR) {
    echo '<h4>пустой массив</h4>';
}
else {
    echo <<<'xx'
    <form id="animalsForm" action="" method="POST">
        <label for="pet">Выберите питомца:</label>
        <select class="pet" id="pet" name="pet" onchange="checkField(this)">
            <option selected>Select</option>
xx;
    foreach($ARR as $item) {
                echo "\t\t\t<option value='$item'>$item</option>\n";
    }
    echo <<<'xx'
        </select>
        <label for="poroda">Выберите породу:</label>
        <select id="poroda" name="poroda" onchange="checkField(this)">
            <option selected>Select</option>
        </select>
    </form>
xx;
}
?>
<hr>
            <center>
                <h1>Данные файла</h1>
                    <table>
 
<?php
        echo "\n\n";
        $file = fopen("animals.csv", "r");
        while (($data = fgetcsv($file)) !== false) {
            echo "<tr>";
            foreach ($data as $i) {
                echo "<td>" . htmlspecialchars($i) . "</td>";
            }
            echo "</tr> \n";
        }
        fclose($file);
        echo "\n";
?>
                 
                    </table>
            </center><hr>
но как-то вероятно 5 значений из данных, кроме этих двух использовать скорее надо...
вероятно там Id какие-то ... и в js я не спец , даже цикл с этими .innerHTML+= это кривовато,)
и
Цитата Сообщение от gahrenad Посмотреть сообщение
<option selected>Select</option>
возможно<option disabled>Выберите зверюгу</option> ))
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
28.02.2024, 18:36
ft4l, как и в одной из недавних тем, здесь достаточно GET-запроса. AJAX-запрос может определяться по адресу, например /ajax-category/cat, или заголовку Accept.

Цитата Сообщение от gahrenad Посмотреть сообщение
Помогите, пожалуйста понять
После выбора в первом списке выполняете AJAX-запрос с id выбранного элемента (выбранной категории). В ответ на этот запрос выполняете на сервере фильтрацию пород по полученному id и возвращаете результат в JSON-формате. По полученным от сервера данным строите на клиенте второй список.

Если список пород по всем категориям не очень большой, можно его загрузить сразу и выполнять фильтрацию на клиенте или просто показывать на выбор заранее отфильтрованные на сервере списки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2024, 18:36
Помогаю со студенческими работами здесь

Правильно ли часто отправлять асинхронные запросы?
Хочу знать. И нуждаюсь в вашем совете. На сайте можно отправлять сообщения админу, и на левом блоке есть сообщения. И левый блок...

Асинхронные запросы в php
здравствуйте. Я пытаюсь понять, как пишется код для асинхронного запроса на sql. Пожалуйста, можете написать пример самой простой программы...

Асинхронные запросы
Система: ubuntu 14.04 nginx 1.4.6 php5-fpm 5.5.9 Все настройки по умолчанию. В javascript'е используются async-jquery...

Асинхронные запросы
Здравия! имеется index.php страница такого вида &lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;get&quot; action=&quot;show.php&quot;&gt; ...

Асинхронные запросы
Здравствуйте. Пытаюсь реализовать асинхронный вызов метода. При использовании Task все проходит хорошо, кроме того, что ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru