Javascript:我是否正确使用onreadystatechange?

Javascript:我是否正确使用onreadystatechange?,javascript,ajax,Javascript,Ajax,请记住,我对JavaScript语法非常陌生,所以请耐心等待 我试图使用多个onreadystatechange作为捕获我从express返回的内容的承诺,但每次我这样做时,它们都会被调用。这是我的密码: var ready = function(){ xhr.open('GET', 'getallbeertypes'); xhr.send(null); xhr.onreadystatechange = function () { var parent

请记住,我对JavaScript语法非常陌生,所以请耐心等待

我试图使用多个
onreadystatechange
作为捕获我从express返回的内容的承诺,但每次我这样做时,它们都会被调用。这是我的密码:

var ready = function(){

    xhr.open('GET', 'getallbeertypes');
    xhr.send(null);
    xhr.onreadystatechange = function () {

        var parent = document.getElementById('recipes');
        var docfrag = document.createDocumentFragment();

        if(xhr.status == 200){
            var beerTypes = JSON.parse(xhr.responseText);

            //loop through beerTypes to append a button to each list item
            for (var beer = 0; beer < beerTypes.length; beer++){
                //create necessary elements
                var li = document.createElement('li');
                var button = document.createElement('BUTTON');

                //set text content to list item
                li.textContent = beerTypes[beer].alias;

                //append list item to button
                button.appendChild(li);

                // add onclick attribute
                button.setAttribute("name", beerTypes[beer]._id);
                button.setAttribute("onclick", "moreInfo(this.getAttribute('name'))");

                //append button to document fragment
                docfrag.appendChild(button);
            }

            //display on DOM element
            parent.appendChild(docfrag);
        }else{
            // console.log(JSON.parse(xhr.responseText));
            var header = document.createElement('h1');
            header.textContent = "Something went wrong. Please try again later.";
            docfrag.appendChild(header);
            parent.appendChild(header);
        }
    }
}
ready();
我希望
onclick
属性只能运行
moreInfo
函数

每当我单击其中一个按钮时,
ready
函数中的
else
语句都会以某种方式运行,并显示
出了问题。请稍后在屏幕上重试

我唯一能建立的连接是
onreadystatechange
,但我真的不知道这是否就是它


如何/为什么调用另一个函数?如何停止它?非常感谢您的帮助。

您应该检查请求的状态。为此,请使用readyState属性。有5个状态,从0到4的整数,最后一个是4

大概是这样的:

if (xhr.readyState == 4 && xhr.status == 200){
 ...
}

检查示例。

您应该检查请求的状态。为此,请使用readyState属性。有5个状态,从0到4的整数,最后一个是4

大概是这样的:

if (xhr.readyState == 4 && xhr.status == 200){
 ...
}

检查示例。

明白了。谢谢你处理我的新手问题,明白了。谢谢你处理我的新手问题。