heretic_man
@heretic_man
frontender который хочет знать все

Правильна ли логика скрипта AJAX? или можно укоротить?

var i = 0;
var nomenclatures = [11,22,33,44,55]; // Эти значения я буду подстовлять по очереди в GET запрос
var errorsArray = []; // Создаю масив для ошибок
var successArray = []; // Создаю масив значений которые успешно отправлены 
for(i; i < nomenclatures.length; i++ ) {
	var nomServ; // на каждой итерации обнуляю переменную и записывая в неё ответ от сервера
	xhr.open('GET', 'https://zakup.sk.kz/eprocpko/api/nomenclatures?search='+nomenclatures[i]+'&page=-1&size=10&sort=tru.code,asc&sort=tru.category,asc',false); // 1)Вначале поиск на сервере

	xhr.onreadystatechange = function() {
		if(xhr.readyState === 4 && xhr.status === 200) {
			if(xhr.responseText === '[]') {
				return errorsArray.push(nomenclatures[i]+ " - Не найден"); // 2) Если ответ от сервера - пустой массив, значит элемента нет
			} else {
				nomServ = JSON.parse(xhr.responseText); // В противном случаии записываю в переменную ответ(в виде JSON);

				xhr.open('POST', 'https://zakup.sk.kz/eprocpko/api/pko-applications/1265416218/nomenclature', false);
				xhr.setRequestHeader('Accept', 'application/json, text/plain, */*');
				xhr.setRequestHeader('content-type', 'application/json');
				xhr.onreadystatechange = function() {
					if(xhr.readyState === 4 && xhr.status === 200 ) {
						return successArray.push(nomenclatures[i]);
					} else if(xhr.getResponseHeader('X-Eproc-Message')[0].message = 'error.pko-nomenclature-tru-exists') { //проверка загловка ответа от сервера на присутсвия этого значения
						return errorsArray.push(nomenclatures[i] + ' - Уже добавлен');
					}
				}
				xhr.send(JSON.stringify(nomServ[0])); 
			}
		}
	}
	xhr.send();
}

if(i === nomenclatures.length) {
	alert('Обработано: ' +nomenclatures.length +'\n' +'Добавленно: ' +successArray +'\n\n' + 'Ошибки: \n' +errorsArray.join(' \n'));
}
  • Вопрос задан
  • 123 просмотра
Решения вопроса 2
@kolejium
Программист .NET, увлекаюсь дизайном и 3D графикой
fetch('https://zakup.sk.kz/eprocpko/api/nomenclatures?search='+nomenclatures[i]+'&page=-1&size=10&sort=tru.code,asc&sort=tru.category,asc')
.then(response => response.json).then(data => функция(data))


В функции делаешь проверку свою и отправляешь еще один fetch(url, { headers: [{'Content-type', 'application/json'}])

Если надо ловить ошибку юзай catch
Ответ написан
@akdes
вижу баг:
if(xhr.getResponseHeader('X-Eproc-Message')[0].message = 'error.pko-nomenclature-tru-exists') {

вы наверное хотите сравнить а не присвоить?!
if(xhr.getResponseHeader('X-Eproc-Message')[0].message === 'error.pko-nomenclature-tru-exists') {


Что касается вопроса, укоротить можно всегда, только нужно ли это? Причина вопроса не понятна, да и описание задачи, было бы не плохо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ITGLOBAL.COM Севастополь
от 120 000 до 200 000 руб.
UTIP Пермь
от 80 000 до 120 000 руб.
21 марта 2019, в 00:19
5000 руб./за проект
20 марта 2019, в 20:02
1000 руб./за проект