我需要javascript promises来完成这项任务吗?

时间:2016-04-16 08:35:36

标签: javascript ajax promise

在深入探讨之前,我是javascript承诺的新手,我想知道在这种情况下是否需要它们。

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

我知道我可以将ajax请求包装在keyup回调中并请求过滤后的数据,但我不知道在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';
  }

}

0 个答案:

没有答案