我是否需要javascript承诺来完成此任务?

我是否需要javascript承诺来完成此任务?,javascript,ajax,promise,Javascript,Ajax,Promise,在深入研究之前,我不熟悉javascript承诺,我想知道在这个场景中是否需要它们 我正在发出一个ajax请求以获取数据,并在响应(新闻小部件)上创建DOM元素。我有一个搜索输入,在那里我可以过滤新闻的标题和内容。因此,在DOM中加载新闻列表后,在Keyup事件上,我可以过滤新闻的内容和标题 我知道我可以在keyup回调中包装ajax请求并请求过滤数据,但我不知道在DOM中的数据已经加载时如何处理 var xhr = new XMLHttpRequest(); xhr.open("GET",

在深入研究之前,我不熟悉javascript承诺,我想知道在这个场景中是否需要它们

我正在发出一个ajax请求以获取数据,并在响应(新闻小部件)上创建DOM元素。我有一个搜索输入,在那里我可以过滤新闻的标题和内容。因此,在DOM中加载新闻列表后,在Keyup事件上,我可以过滤新闻的内容和标题

我知道我可以在keyup回调中包装ajax请求并请求过滤数据,但我不知道在DOM中的数据已经加载时如何处理

var xhr = new XMLHttpRequest();

xhr.open("GET", "data.json");
xhr.onreadystatechange = function() {
  if (this.status === 200 && this.readyState === 4) {
    var respneseParse = JSON.parse(this.responseText);
    var articles = respneseParse.results;

    var articleList = '<ul>';
    articles.forEach(function(article,index){
      var relatedStories = article.relatedStories;
      articleList += '<li id="article" onclick= "basanti('+index+')">';
      articleList += '<input type="checkbox" name="article-heading"  id="article-heading'+index+'"><label for="article-heading'+index+'">'+ article.titleNoFormatting +'</label>';
      articleList += '<div id="article-detail'+index+'" style="display:none">';
      articleList += '<img src="'+article.image.url+'" alt="'+ article.titleNoFormatting +'" style="height:'+article.image.tbHeight+';width:'+article.image.tbWidth+';" />';
      articleList += '<p>'+ article.content+'</p>';
      articleList += '<a href="'+article.unescapedUrl+'"> Read more.. </a>';
      if(relatedStories){
        relatedStories.forEach(function(articleRelatedStories){
          articleList += '<ul id="related-stories">';
          articleList += '<li><a href="'+articleRelatedStories.unescapedUrl+'">'+articleRelatedStories.titleNoFormatting+'</a></li>';
          articleList += '</ul>';
        });
      };
      articleList += '</div>';
      articleList += '</li>';
    })
    articleList += '</ul>';

    document.getElementById('article-list').innerHTML = articleList;
  }
};

xhr.send();

var basanti = function (index){
  var articleDetail = document.getElementById('article-detail'+index+'');
  var articleHeading = document.getElementById('article-heading'+index+'');
  if(articleHeading.checked){
    articleDetail.style.display = 'block';
  }else {
    articleDetail.style.display = 'none';
  }

}
var xhr=new-XMLHttpRequest();
open(“GET”,“data.json”);
xhr.onreadystatechange=函数(){
if(this.status==200&&this.readyState==4){
var respneseParse=JSON.parse(this.responseText);
var articles=respnesparse.results;
var articleList=“
    ”; articles.forEach(功能(文章、索引){ var relatedStories=article.relatedStories; articleList+='
  • ; articleList+=''+article.titlenoformating+''; articleList+=''; articleList+=''; articleList+=''+article.content+'

    '; articleList+=''; 如果(相关故事){ relatedStories.forEach(函数(articleRelatedStories){ articleList+='
      ; articleList+='
    • '; articleList+='
    '; }); }; articleList+=''; articleList+='
  • '; }) articleList+='
'; document.getElementById('article-list')。innerHTML=articleList; } }; xhr.send(); var basanti=函数(索引){ var article-detail=document.getElementById('article-detail'+index+''); var articleHeading=document.getElementById('article-heading'+index+''); 如果(文章标题。选中){ articleDetail.style.display='block'; }否则{ articleDetail.style.display='none'; } }
看看这些承诺是非常有用的,但在这个具体问题上不会有什么不同。如果您只是想知道DOM何时完成加载,那么请查看codenathan在前面的注释中的链接。