Помогите пожалуйста переписать запрос таким образом чтобы не было повторяющихся кусков кода. Мой код для случая 1350 работает, но если городов будет, например, 5350, то код превратится в индусский(не DRY).
$( document ).ready(function() {
getCities();
var citiesArr = [];
var citiesArr1 = [];
var citiesArr2 = [];
function getCities() {
$.ajax({
url: "http://api.vk.com/method/database.getCities?v=5.69&need_all=0&count=1000&country_id=1®ion_id=1052052",
dataType: "jsonp",
success: function( data ) {
// console.log('data', data);
var allCities = data.response.count;
console.log('allCities', allCities);
var citiesRaw = data['response']['items'];
citiesArr1 = citiesRaw.map(function(city) {
return city.title;
});
//console.log(citiesArr);
getCities2();
}
});
};
function getCities2() {
$.ajax({
url: "http://api.vk.com/method/database.getCities?v=5.69&need_all=0&count=1000&country_id=1®ion_id=1052052&offset=1000",
dataType: "jsonp",
success: function( data ) {
// console.log('data', data);
var allCities = data.response.count;
console.log('allCities', allCities);
var citiesRaw = data['response']['items'];
var citiesArr2 = citiesRaw.map(function(city) {
return city.title;
});
citiesArr = citiesArr1.concat(citiesArr2);
console.log(citiesArr);
}
});
};
});
Как видите, здесь для определённого региона получаю в два этапа список всех городов. Этапа два потому что vk api за один запрос возвращает не более 1000 городов. Хотелось бы более лаконичного решения
Загрузит все города в один массив cities.
var cities = []
function getCities( offset, limit ) {
if( ! limit || limit > 1000 ) limit = 1000; //число запрашиваемых городов, максимально 1000, по умолчанию 1000
if( ! offset ) offset = 0; //по умолчанию 0
$.ajax({
url: "http://api.vk.com/method/database.getCities?v=5.69&need_all=0&count="+limit+"&country_id=1®ion_id=1052052&offset="+(offset*limit),
dataType: "jsonp",
success: function( data ) {
// console.log('data', data);
var allCities = data.response.count;
console.log('allCities', allCities);
var citiesRaw = data['response']['items'];
//с помощью concat можно объеденить 2 массива.
cities = cities.concat(citiesRaw.map(function(city) {
return city.title;
}));
//если в текущем ответе не все города то делаем ещё запрос с новым offset
if( allCities > offset*limit + limit)
getCities(offset+1, limit);
}
});
};
Вызывать просто getCities()
. Будет грузить все города, сколько бы тысяч их не было.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть фронтенд, часть на реакт и бэкэнд на nodeЯ через ssh загрузил все на сервер
Есть такая функция , как ее модифицировать под 2 значения , чтобы можно была считать от числа num1 к числу num2
Ребята, что нужно дописать, что бы передача параметров не могла начинаться с &, как во втором примере?