Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.01.2018, 20:29
Новичок на форуме
Отправить личное сообщение для Iwashka Посмотреть профиль Найти все сообщения от Iwashka
 
Регистрация: 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, потому как на экране пользователя в селекте активна строка "Добавить" (она ведь единственная).
Ответить с цитированием
  #2 (permalink)  
Старый 05.01.2018, 20:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Iwashka
Но алерт выдаёт пустоту, хотя должен показать add
Не должен, оба этих процесса асинхронны.
Ответить с цитированием
  #3 (permalink)  
Старый 05.01.2018, 20:51
Новичок на форуме
Отправить личное сообщение для Iwashka Посмотреть профиль Найти все сообщения от Iwashka
 
Регистрация: 01.12.2017
Сообщений: 7

Сообщение от laimas Посмотреть сообщение
Не должен, оба этих процесса асинхронны.
Хорошо, как же быть?
Как же проверить, если в дате только value=add, тогда выполнить еще функцию?
Ответить с цитированием
  #4 (permalink)  
Старый 05.01.2018, 20:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.
Ответить с цитированием
  #5 (permalink)  
Старый 05.01.2018, 20:59
Новичок на форуме
Отправить личное сообщение для Iwashka Посмотреть профиль Найти все сообщения от Iwashka
 
Регистрация: 01.12.2017
Сообщений: 7

Сообщение от laimas Посмотреть сообщение
В success и проверяйте, что вернул сервер, вот только в таком случае удобнее не html, а json.
Подскажите, пожалуйста, в каком виде json'a (на примере, если можно) сервер должен давать ответ? И как его в JS'e потом использовать.

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

Буду безмерно благодарен за рабочий код.
Гранд Мерси!
Ответить с цитированием
  #6 (permalink)  
Старый 05.01.2018, 21:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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


Но уж больно странный "протокол" получается. Не известно чего вы делаете, но поищите здесь на форуме темы по "связанным спискам". Даже если у вас не это, все равно будет полезно почитать как и каким форматом обменивается сервер с клиентом на запросы, и как по возвращенным данным динамически формируются/обновляются списки на клиенте.
Ответить с цитированием
  #7 (permalink)  
Старый 05.01.2018, 21:17
Новичок на форуме
Отправить личное сообщение для Iwashka Посмотреть профиль Найти все сообщения от Iwashka
 
Регистрация: 01.12.2017
Сообщений: 7

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

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

Последний раз редактировалось Iwashka, 05.01.2018 в 21:20.
Ответить с цитированием
  #8 (permalink)  
Старый 05.01.2018, 21:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Iwashka
Не думал, что странным покажется моё объяснение.
Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.
Ответить с цитированием
  #9 (permalink)  
Старый 05.01.2018, 21:48
Новичок на форуме
Отправить личное сообщение для Iwashka Посмотреть профиль Найти все сообщения от Iwashka
 
Регистрация: 01.12.2017
Сообщений: 7

Сообщение от laimas Посмотреть сообщение
Странно зачем заполнять список одной опцией, которая и так будет выбрана. У каждой задачи может быть множество решений. В данном случае, при обмене в формате Json, можно и условится, что сервер под ключом data возвращает массив параметров опций для списка, а если этот ключ возвращает null, значит список пуст и добавляем поле ввода.
Что-то пробовал я добавлять, не получилось))
Кнопка добавить должна быть всегда, даже когда есть и другие option.
Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add".
Если подскажите, в чём проблема - буду благодарен.
Ответить с цитированием
  #10 (permalink)  
Старый 06.01.2018, 07:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

Последний раз редактировалось laimas, 06.01.2018 в 10:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка “define is not defined” при запуске Istanbul TorchTT Общие вопросы Javascript 0 26.06.2014 15:38
В чем ошибка в коде под ie8? addEventListener jssj Events/DOM/Window 1 30.11.2013 18:27
firebug пишет ошибка invalid range in character class Dim@ Общие вопросы Javascript 5 10.05.2012 16:52
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
IE: неизвестная ошибка выполнения _Kpot_ Internet Explorer 1 03.04.2008 11:00