| 
	| 
	
	| 
		
	| 
			
			 
			
				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,989
					 
		
 |  |  
	| 
	
 
	| Сообщение от Iwashka |  
	| Но алерт выдаёт пустоту, хотя должен показать add |  
	
 Не должен, оба этих процесса асинхронны. |  |  
	| 
		
	| 
			
			 
			
				05.01.2018, 20:51
			
			
			
		 |  
	| 
		
			
			| Новичок на форуме       |  | 
					Регистрация: 01.12.2017 
						Сообщений: 7
					 
		
 |  |  
	| 
	
 
	| Сообщение от laimas   |  
	| Не должен, оба этих процесса асинхронны. |  
	
 Хорошо, как же быть? 
Как же проверить, если в дате только value=add, тогда выполнить еще функцию? |  |  
	| 
		
	| 
			
			 
			
				05.01.2018, 20:53
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| В 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,989
					 
		
 |  |  
	| Да просто, отдавать сервером данные в 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,989
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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,989
					 
		
 |  |  
	| 
	
 
	| Сообщение от Iwashka |  
	| Вот когда сервер отдаёт другие опции, у меня не получилось js'ом добавить option value="add". Если подскажите, в чём проблема
 |  
	
 Для этого нужно видеть чего вы отдаете и пытаетесь сделать.
 
Что касается одной опции присутствующей всегда - попробуйте в списке с одной опцией сделать выбор.			 Последний раз редактировалось laimas, 06.01.2018 в 10:00.
 |  |  |  |