0

Нужно в другом месте кода вызвать эту функцию и получить данные которые вернул сервер! Как это сделать? Пробовал сделать return this.responseText;, но что-то не помогло... Что я делаю не так?

    function sendFunction(url,params){ 


    var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;

    var xhru = new XHR();

    xhru.open('POST', ''+HOST+''+url+'', true);

    xhru.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

    xhru.onload = function() {
        var ans = JSON.parse(this.responseText);



        return this.responseText;
    }

    xhru.onerror = function() {
        // alert( 'Ошибка ' + this.status );
        //console.log( 'Ошибка ' + this.status);
    }

    xhru.send(params);


}
  • 2
    запрос на сервер вещь асинхронная, ответ придет когда-то или не придет. стандартный подход - передать в функцию запроса другую функцию - callback, и вызвать ее когда придет ответ, т.е в onload – Stranger in the Q Oct 23 '19 at 06:21
  • 1
    function sendFunction(url,params,callback) и после выполните коллбек (это функция) в onload – Vitaliy Stop_RU_war_in_UA Oct 23 '19 at 06:32
  • Как писали выше можно использовать callback, но также можно использовать и Промисы. Т.е. в теле функции написать return new Promise((resolve, reject)=>{/*тело функции*/}) а в onload прописать resolve(this.responseText). Если произошла ошибка reject(this.status). Соответственно при вызове пишем так sendFunction(url, params).then((result)=>{/*делаем что-то с результатом*/}. Подробнее о Промисах тут: https://learn.javascript.ru/promise – balamutik Oct 23 '19 at 07:25
  • @ВиталийШебаниц попробовал как вы описали, поставил callback() в xhru.onload = function() { callback(); } пишет ошибка и функция callback не найдена. – Alexander Sizintsev Oct 23 '19 at 13:11

1 Answers1

1

Оставил внутри то, что вас интересует. Фишка в том что вы не получаете данные с функции, а просто заталкиваете в нее еще функцию, которая выполниться, когда запрос выполнится, т к сам запрос асинхронный.

function sendFunction(url,callbackSuccess,callbackError){ 
    var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
    var xhru = new XHR();
    xhru.open('GET', url, true);
    xhru.onload = function() {
        callbackSuccess(this.responseText);
    }
xhru.onerror = function() {
    callbackError()
}

xhru.send();

}

sendFunction("https://jsonplaceholder.typicode.com/users",function(res){console.log(res)});