@newaitix

Вернуть результат ajax запроса?

Функция которая делает ajax запрос
function getBranchesNovaPoshta(sity,lang){
	var xhr=new XMLHttpRequest();
	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){
			
		};
	};
	xhr.send(json);
}

Обычная функция
var fn=function(){
return true;
}

Если я хочу узнать успешность выполнения кода в середине функции я возвращаю succes или defeat в зависимости от результата.
Если говорить про функцию номер 2 я могу спросить
if(fn())// то делаем что то
и это я могу сделать вне этой функции
Но если говорить про первую функцию то она вернет мне результат до того как сервер ответит на ajax запрос. Как в этом случае выполнить в случае успеха один код а в ином случае другой код ?
  • Вопрос задан
  • 924 просмотра
Пригласить эксперта
Ответы на вопрос 3
@UNy
XMLHttpRequest уже староват) используйте fetch(работает с промисами).
Ответ написан
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
сто раз обсуждалось.
$.ajaxSetup({
                error: function (x, status, error) {
                    console.log("An error occurred: " + status + " nError: " + error + "  " + x);
                }
            });
            $.ajax({
                url: "/some/route",
                dataType: "json",
                type: "POST",
                data: {"key": key, "mode": mode},
                success: (function (data) {
                    if (data == "ok") {
                           alert('its ok!');
                           doSomeCallBack(data)
                    }
                })
            })

еще варианты
beforeSend:
error:
complete:

Promise callbacks — .done(), .fail(), .always(), and .then()
Ответ написан
Комментировать
JackShcherbakov
@JackShcherbakov
Не получится у Вас ничего вернуть. JavaScript - асинхронный язык. У меня тоже была такая проблема. Я просто создал глобальную переменную и при получении ответа в нее записывал значение xhr.resonseText. Вообщем отталкивайтесь от этого. И да, не sity, а city
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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