首页 > 解决方案 > 回调函数承诺 ajax

问题描述

我在使用 Promise 回调从 json 显示信息时遇到问题。我已经显示帖子,但我无法显示每个帖子的评论。泰。

这是我的代码

JS

var root = 'https://jsonplaceholder.typicode.com/posts'

$.ajax({
    url: root,
    method:'GET',
    data:{
        a:''
    }
})

  .done(function(post) {

      for(i=0 ; i<10;i++){
        document.write(JSON.stringify(post[i]))
        document.write('<br>')
        document.write('<br>')
        document.write('<br>')
      }

  })
 .done(function(comments){
    for(j=0; j<10;j++){
        $.ajax({
          url: root +'/'+ j+'/comments',
          method:'GET',
          comments:{
              b:''
          }

      })
            }

 })

标签: javascriptjquery

解决方案


如果您可以使用 ES8 语法async await,请执行以下操作:

async function getHTML() {
    const root = 'https://jsonplaceholder.typicode.com/posts';
    const response = await $.get(root);
    let html = "";
    for (let i = 0; i < 10; i++) {
        html += JSON.stringify(response[i]) + "</br>";
        comments = await $.get(root +'/' + i +'/comments');
        for (const comment of comments) {
            html += JSON.stringify(comment) + "</br>";
        }
    }
    return html;
}

getHTML().then(html => console.log(html), err => console.error(err));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

以下是使用 ES6 的方法Promise.all

function getHTML() {
    var root = 'https://jsonplaceholder.typicode.com/posts';
    return $.get(root).then(function (response) {
        var html = "";
        var promises = []; // collect the requests for all comments
        for (var i = 0; i < 10; i++) {
            promises.push($.get(root +'/' + i +'/comments').promise());
        }
        return Promise.all(promises).then(function (response2) {
            for (var i = 0; i < 10; i++) {
                html += JSON.stringify(response[i]) + "</br>";
                for (var j = 0; j < response2.length; j++) {
                    html += JSON.stringify(response2[j]) + "</br>";
                }
            }
            return html;
        });
    });
}

getHTML().then((html) => console.log(html));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


推荐阅读