Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Общая ошибка (https://javascript.ru/forum/misc/72073-obshhaya-oshibka.html)

Iwashka 05.01.2018 20:29

Общая ошибка
 
Здравствуйте.
Есть код.
function do_a() {
        var ms = $('select[name="name"]');

        $.ajax({
            type: "POST",
            url: "/test.php",
            data: "d_id="+document.getElementById("d_id").value,
            success: function ( data ) {
                ms.empty().html(data);

            }
        });


    }

    do_a();
    var s = document.getElementById('name');
    alert(s.value);

PHP скрипт генерирует ответ (только 1 option):

<option value="add">Добавить</option>


Но алерт выдаёт пустоту, хотя должен показать add, потому как на экране пользователя в селекте активна строка "Добавить" (она ведь единственная).

laimas 05.01.2018 20:32

Цитата:

Сообщение от Iwashka
Но алерт выдаёт пустоту, хотя должен показать add

Не должен, оба этих процесса асинхронны.

Iwashka 05.01.2018 20:51

Цитата:

Сообщение от laimas (Сообщение 474349)
Не должен, оба этих процесса асинхронны.

Хорошо, как же быть?
Как же проверить, если в дате только value=add, тогда выполнить еще функцию?

laimas 05.01.2018 20:53

В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.

Iwashka 05.01.2018 20:59

Цитата:

Сообщение от laimas (Сообщение 474354)
В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.

Подскажите, пожалуйста, в каком виде json'a (на примере, если можно) сервер должен давать ответ? И как его в JS'e потом использовать.

Сам понимаю, что с HTML'ем как-то "покостыльному" использовать. Лучше добавлять через option самим JS'ом.

Буду безмерно благодарен за рабочий код.
Гранд Мерси!

laimas 05.01.2018 21:11

Да просто, отдавать сервером данные в json формате - exit(json_encode(массив данных)), и передав соответствующий заголовок типа данных. Клиент получит в этом случае объект (в вашем пример, data будет объектом), свойствами которого будут ключи массива переданного сервером, а их значения, значениями массива. Например, сервер отдает данные как массив 'value'=>'add'. Проверить, значение на клиенте так

if(data.value=='add') ....


Но уж больно странный "протокол" получается. Не известно чего вы делаете, но поищите здесь на форуме темы по "связанным спискам". Даже если у вас не это, все равно будет полезно почитать как и каким форматом обменивается сервер с клиентом на запросы, и как по возвращенным данным динамически формируются/обновляются списки на клиенте.

Iwashka 05.01.2018 21:17

Не думал, что странным покажется моё объяснение.
Тогда собственно сама задача.
1. Подгружаем данные в selector
2. Последняя строчка <option value="add>Добавить</option>
3. Далее проверка, если у нас только "Добавить" в селекторе, тогда в див добавляем новое инпут поле для ввода новых данных.

P.S.
Собственно, всё остальное решено. Кроме 3-го пункта. "Затык" с этой проверкой.

laimas 05.01.2018 21:33

Цитата:

Сообщение от Iwashka
Не думал, что странным покажется моё объяснение.

Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.

Iwashka 05.01.2018 21:48

Цитата:

Сообщение от laimas (Сообщение 474359)
Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.

Что-то пробовал я добавлять, не получилось))
Кнопка добавить должна быть всегда, даже когда есть и другие option.
Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add".
Если подскажите, в чём проблема - буду благодарен.

laimas 06.01.2018 07:58

Цитата:

Сообщение от Iwashka
Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add".
Если подскажите, в чём проблема

Для этого нужно видеть чего вы отдаете и пытаетесь сделать.

Что касается одной опции присутствующей всегда - попробуйте в списке с одной опцией сделать выбор.


Часовой пояс GMT +3, время: 20:31.