@newaitix

В чем разница между вызовом в консоли и вызовом по событию?

Вот список
<select id="secession_NP">
	<option value="null">Выберите склад Новой Почты</option>
</select>

Функция, которая делает запрос на api НП а затем добавляет в выпадающий список, список отделений которые находятся в городе Черкассы.
function getBranchesNovaPoshta(sity,lang){
		var xhr=new XMLHttpRequest();
		console.log(xhr)
		var json=JSON.stringify({
				"modelName":"AddressGeneral",
				"calledMethod":"getWarehouses",
				"apiKey":"d878fb1a280844a6629b6a18bd50bc43",
				"methodProperties": {
				"CityName":sity
				},
				"Language":lang
			});
		xhr.open("POST",'http://api.novaposhta.ua/v2.0/json/',true)
		xhr.setRequestHeader('Content-type','application/json;charset=utf-8');
		xhr.onreadystatechange=function(){
			if(xhr.readyState===XMLHttpRequest.DONE&&xhr.status===200){
				var res=JSON.parse(xhr.responseText);
				var i=0;
				for(var i in res.data){
					i++;
					var option=document.createElement('option');
					if(res.data[i]!=undefined){
						var type = /приватбанк/i.test(res.data[i].Description)?'PB':'NP';
						var number = /[#№]\s*?(\d+)/.test(res.data[i].Description) ? /[#№]\s*?(\d+)/.exec(res.data[i].Description)[1] : 0;
						option.value=type+''+number;
						option.innerHTML=res.data[i].Description;
						document.getElementById('secession_NP').appendChild(option);
					}
				}
			};
		};
		xhr.send(json);
	}

Запуск этого криворукого кода
document.addEventListener('DOMContentLoaded',function(ev){
		document.getElementById('secession_NP').onmousedown=function(ev){
			getBranchesNovaPoshta("Черкаси","ru");
		};
	}, false);

В результате ничего не получаю. Список не выводится. Новые opton не добавляются.
При вызове функции через консоль я получаю от сервера нормальный json при клике я получаю пустой json.
what the fuck is this ? Это какой то бред.
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Nik_Set_7
Я думаю ответ на этот вопрос Вы должны дать сами.
Но чтобы разобраться, надо удалить нафиг этот код и переписать его с использованием jQuery (так будет лучше).
Перепишите и скорее всего заработает.

Плюс разберитесь с модульностью в js через import/export:
https://learn.javascript.ru/modules

Это нужно, чтобы избежать загрязнения глобальной области обработчиками и пр.
Для работы конструкций ES6 Вам понадобится сборщик webpack4 или менеджер задач Gulp с таском с browserify (советую первый вариант)

Это всё нужно, чтобы Ваш код был:
- проще
- понятнее в первую очередь для Вас
- в случае ошибки Вы быстрее сможете найти её (в каком модуле)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы