8.8.1、回调地狱

  1. <div id="app"></div>
  2. <h2>列表数据</h2>
  3. <p class="dp"></p>
  4. <audio src="" controls></audio>
  5. <script>
  6. /* 回调地狱 */
  7. /* 1.华语中的第一条数据 */
  8. var url ='http://192.168.4.18:3000/top/playlist/?cat=华语';
  9. $.ajax({
  10. url,
  11. success:res=>{
  12. var {name,id} = res.playlists[0]
  13. $("#app").html(name)
  14. /* 2.列表页的数据 */
  15. var listUrl = `http://192.168.4.18:3000/playlist/detail?id=${id}`;
  16. $.ajax({
  17. url:listUrl,
  18. success:res=>{
  19. var {name,id} = res.playlist.tracks[0]
  20. $(".dp").html(name)
  21. console.log(id)
  22. /* 3.根据id获取音乐播放的url链接 */
  23. var musicUrl = `http://192.168.4.18:3000/song/url?id=${id}`
  24. $.ajax({
  25. url:musicUrl,
  26. success:res=>{
  27. let src = res.data[0].url;
  28. $("audio").attr("src",src)
  29. }
  30. })
  31. }
  32. })
  33. }
  34. })

8.8.2、ajax迭代

原生ajax

  1. var url = "http://192.168.4.18:8000/"
  2. var xhr = new XMLHttpRequest();
  3. xhr.open("get", url, true);
  4. xhr.send();
  5. xhr.onreadystatechange = function () {
  6. if (xhr.readyState == 4 && xhr.status == 200) {
  7. var result = JSON.parse(xhr.responseText);
  8. console.log(result)
  9. }
  10. }

回调函数封装ajax

  1. function ajax(url,method="get",success) {
  2. var xhr = new XMLHttpRequest();
  3. xhr.open(method, url, true);
  4. xhr.send();
  5. xhr.onreadystatechange = function () {
  6. if (xhr.readyState == 4 && xhr.status == 200) {
  7. var result = JSON.parse(xhr.responseText);
  8. success(result)
  9. }
  10. }
  11. }
  12. # 需要记住传参的顺序
  1. function ajax({
  2. url,
  3. method="get",
  4. success
  5. }) {
  6. var xhr = new XMLHttpRequest();
  7. xhr.open(method, url, true);
  8. xhr.send();
  9. xhr.onreadystatechange = function () {
  10. if (xhr.readyState == 4 && xhr.status == 200) {
  11. var result = JSON.parse(xhr.responseText);
  12. success(result)
  13. }
  14. }
  15. }

jquery-ajax

  1. $.ajax({
  2. url:"http://192.168.4.18:8000/",
  3. type:"get",
  4. dataType:"json",
  5. success:res=>{
  6. console.log(res)
  7. }
  8. })

callback封装jquery-ajax

  1. function http({url,type="get",success}){
  2. $.ajax({
  3. url,
  4. type,
  5. dataType:"json",
  6. success:res=>{
  7. success(rs)
  8. }
  9. })
  10. }

promise封装ajax

  1. function http(url){
  2. return new Promise((resolve,reject)=>{
  3. $.ajax({
  4. url,
  5. type:"get",
  6. success:res=>{
  7. resolve(res)
  8. },
  9. error:err=>{
  10. reject(err);
  11. }
  12. })
  13. })
  14. }