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'));
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 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') {


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

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

Войти через центр авторизации
Похожие вопросы