Показать сообщение отдельно
  #2 (permalink)  
Старый 22.02.2018, 20:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Ниже функция, с помощью которой вы можете работать с клиента (из браузера) с API сервиса kladr-api.ru
Принимает она 1 аргумент - или строку, или объект параметров; возвращает экземпляр промиса (Promise).
Про промисы можно почитать тут: https://learn.javascript.ru/promise.
function request(params){
	var node=document.createElement('script'),src='//kladr-api.ru/api.php?',
		res,rej,
		result=new Promise(function(resolve,reject){
			res=resolve;
			rej=reject;
		});
	
	node.type='text/javascript';
	node.id=(new Date()).getTime()+Math.random();
	node.onerror=function(){
		node.parentNode.removeChild(node);
		rej();
	};
	node.onload=function(){
		node.parentNode.removeChild(node);
	};
	
	if(typeof params=='string')
		src+=['?','&'].indexOf(params.substr(0,1))>-1?params.substr(1):params;
	else if(typeof params=='object')
		src+=Object.keys(params).map(function(key){
			return key+'='+encodeURIComponent(params[key]);
		}).join('&');
	
	var callback='__jsonp_dynamic_callback_'+node.id.toString().replace('.','');
	window[callback]=function(json){
		res(json);
		
		delete window[callback];
	};
	
	node.src=src+(!params?'':'&')+'callback='+callback;
	document.body.appendChild(node);
	
	return result;
};

request('?query=Арх&contentType=city&withParent=1&limit=3').then(function(json){
    console.log(json);
});

Upd. Еще так можно использовать:
request({
    query:'Арх',
    contentType:'city',
    withParent:1,
    limit:3
}).then(function(json){
    console.log(json);
});

Последний раз редактировалось Nexus, 22.02.2018 в 21:03.
Ответить с цитированием