05.01.2018, 20:29
|
Новичок на форуме
|
|
Регистрация: 01.12.2017
Сообщений: 7
|
|
Общая ошибка
Здравствуйте.
Есть код.
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, потому как на экране пользователя в селекте активна строка "Добавить" (она ведь единственная).
|
|
05.01.2018, 20:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Iwashka
|
Но алерт выдаёт пустоту, хотя должен показать add
|
Не должен, оба этих процесса асинхронны.
|
|
05.01.2018, 20:51
|
Новичок на форуме
|
|
Регистрация: 01.12.2017
Сообщений: 7
|
|
Сообщение от laimas
|
Не должен, оба этих процесса асинхронны.
|
Хорошо, как же быть?
Как же проверить, если в дате только value=add, тогда выполнить еще функцию?
|
|
05.01.2018, 20:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.
|
|
05.01.2018, 20:59
|
Новичок на форуме
|
|
Регистрация: 01.12.2017
Сообщений: 7
|
|
Сообщение от laimas
|
В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.
|
Подскажите, пожалуйста, в каком виде json'a (на примере, если можно) сервер должен давать ответ? И как его в JS'e потом использовать.
Сам понимаю, что с HTML'ем как-то "покостыльному" использовать. Лучше добавлять через option самим JS'ом.
Буду безмерно благодарен за рабочий код.
Гранд Мерси!
|
|
05.01.2018, 21:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Да просто, отдавать сервером данные в json формате - exit(json_encode(массив данных)), и передав соответствующий заголовок типа данных. Клиент получит в этом случае объект (в вашем пример, data будет объектом), свойствами которого будут ключи массива переданного сервером, а их значения, значениями массива. Например, сервер отдает данные как массив 'value'=>'add'. Проверить, значение на клиенте так
if(data.value=='add') ....
Но уж больно странный "протокол" получается. Не известно чего вы делаете, но поищите здесь на форуме темы по "связанным спискам". Даже если у вас не это, все равно будет полезно почитать как и каким форматом обменивается сервер с клиентом на запросы, и как по возвращенным данным динамически формируются/обновляются списки на клиенте.
|
|
05.01.2018, 21:17
|
Новичок на форуме
|
|
Регистрация: 01.12.2017
Сообщений: 7
|
|
Не думал, что странным покажется моё объяснение.
Тогда собственно сама задача.
1. Подгружаем данные в selector
2. Последняя строчка <option value="add>Добавить</option>
3. Далее проверка, если у нас только "Добавить" в селекторе, тогда в див добавляем новое инпут поле для ввода новых данных.
P.S.
Собственно, всё остальное решено. Кроме 3-го пункта. "Затык" с этой проверкой.
Последний раз редактировалось Iwashka, 05.01.2018 в 21:20.
|
|
05.01.2018, 21:33
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Iwashka
|
Не думал, что странным покажется моё объяснение.
|
Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.
|
|
05.01.2018, 21:48
|
Новичок на форуме
|
|
Регистрация: 01.12.2017
Сообщений: 7
|
|
Сообщение от laimas
|
Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.
|
Что-то пробовал я добавлять, не получилось))
Кнопка добавить должна быть всегда, даже когда есть и другие option.
Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add".
Если подскажите, в чём проблема - буду благодарен.
|
|
06.01.2018, 07:58
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Iwashka
|
Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add".
Если подскажите, в чём проблема
|
Для этого нужно видеть чего вы отдаете и пытаетесь сделать.
Что касается одной опции присутствующей всегда - попробуйте в списке с одной опцией сделать выбор.
Последний раз редактировалось laimas, 06.01.2018 в 10:00.
|
|
|
|