1

Есть такой код:

function getDataAboutProduct(data){
        var request = new XMLHttpRequest(); 

        request.open('POST', 'php/product_getInfo.php'); 
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

        request.onreadystatechange = function(){
            if(request.status == 200 && request.readyState == 4){
                return request.responseText; 
            }
        }

        request.send(data); 
    }

Обычная функция с ajax-запросом, дело в том что нужно вызвать эту функцию и вернуть данные, вопрос в том как это можно сделать, куда возвращает значение строчка return request.responseText; и как его можно перехватить в основной функции и вернуть?

Nick Volynkin
  • 34,094
Shillkas
  • 665

1 Answers1

1
function getDataAboutProduct(data) {
    return new Promise(resolve => {
        var request = new XMLHttpRequest();

        request.open('POST', 'php/product_getInfo.php');
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

        request.onreadystatechange = function() {
            if (request.status == 200 && request.readyState == 4) {
                resolve(request.responseText);
            }
        }

        request.send(data);
    })
}
getDataAboutProduct(data).then(result => {
    console.log(result)
})
A50
  • 434
  • Это т.н. обещания, а они всеми браузерами поддерживаются? – Shillkas Sep 17 '17 at 09:37
  • 1
    нет. http://caniuse.com/#search=promise, но ты можешь прогнать этот код через babel https://babeljs.io/ и это будет работать везде – A50 Sep 17 '17 at 09:38
  • Для обещаний существуют полифиллы вплоть до поддержки IE8 – andreymal Sep 17 '17 at 09:49