index.html 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="content"></div>
  11. <script>
  12. //FETCH BASIC
  13. // function drawTable(params = {}) {
  14. // let { data = {}, parent = document.body } = params;
  15. // let table = document.createElement("table");
  16. // table.border = 1;
  17. // parent.append(table);
  18. // for (let el in data) {
  19. // let tr = document.createElement("tr");
  20. // let th = document.createElement("th");
  21. // let td = document.createElement("td");
  22. // if (data[el].constructor.name === "Object") {
  23. // drawTable({ data: data[el], parent: td });
  24. // table.append(tr);
  25. // tr.append(th);
  26. // tr.append(td);
  27. // continue;
  28. // }
  29. // if (data[el].constructor.name === "Array") {
  30. // let tr = document.createElement("tr");
  31. // let th = document.createElement("th");
  32. // table.append(tr);
  33. // tr.append(th);
  34. // th.innerHTML = el;
  35. // th.colSpan = 2;
  36. // for (let item of data[el]) {
  37. // let tr = document.createElement("tr");
  38. // let td = document.createElement("td");
  39. // table.append(tr);
  40. // tr.append(td);
  41. // if (data[el].constructor.name === "Object") {
  42. // drawTable({ data: data[el], parent: td });
  43. // continue;
  44. // }
  45. // td.colSpan = 2;
  46. // td.innerHTML = item;
  47. // }
  48. // continue;
  49. // }
  50. // table.append(tr);
  51. // tr.append(th);
  52. // tr.append(td);
  53. // th.innerHTML = el;
  54. // td.innerHTML = data[el];
  55. // }
  56. // parent.append(table);
  57. // }
  58. // fetch("https://swapi.py4e.com/api/people/1/")
  59. // .then((res) => res.json())
  60. // .then((luke) => {
  61. // drawTable({ data: luke });
  62. // });
  63. //FETCH IMPROVED
  64. function drawTable(params = {}) {
  65. let { data = {}, parent = document.body } = params;
  66. let table = document.createElement("table");
  67. table.border = 1;
  68. parent.append(table);
  69. for (let [key, val] of Object.entries(data)) {
  70. let tr = document.createElement("tr");
  71. let th = document.createElement("th");
  72. let td = document.createElement("td");
  73. if (val.constructor.name === "Object") {
  74. drawTable({ data: val, parent: td });
  75. table.append(tr);
  76. tr.append(th);
  77. tr.append(td);
  78. continue;
  79. }
  80. if (val.constructor.name === "Array") {
  81. let tr = document.createElement("tr");
  82. let th = document.createElement("th");
  83. table.append(tr);
  84. tr.append(th);
  85. th.innerHTML = key;
  86. th.colSpan = 2;
  87. for (let value of val) {
  88. let tr = document.createElement("tr");
  89. let td = document.createElement("td");
  90. table.append(tr);
  91. tr.append(td);
  92. if (value.match(/^https:\/\/swapi\.py4e\.com\/+/)) {
  93. let btn = document.createElement("button");
  94. btn.innerHTML = value;
  95. btn.onclick = () => {
  96. fetch(value)
  97. .then((res) => res.json())
  98. .then((luke) => {
  99. drawTable({ data: luke });
  100. });
  101. };
  102. td.colSpan = 2;
  103. td.append(btn);
  104. continue;
  105. }
  106. if (val.constructor.name === "Object") {
  107. drawTable({ data: val, parent: td });
  108. continue;
  109. }
  110. td.colSpan = 2;
  111. td.innerHTML = value;
  112. }
  113. continue;
  114. }
  115. table.append(tr);
  116. tr.append(th);
  117. tr.append(td);
  118. th.innerHTML = key;
  119. if (val.constructor.name === "String" && val.match(/^https:\/\/swapi\.py4e\.com\/+/)) {
  120. let btn = document.createElement("button");
  121. btn.innerHTML = val;
  122. btn.onclick = () => {
  123. fetch(val)
  124. .then((res) => res.json())
  125. .then((data) => {
  126. drawTable({ data: data });
  127. });
  128. };
  129. td.append(btn);
  130. continue;
  131. }
  132. td.innerHTML = val;
  133. }
  134. parent === document.body && (parent.innerHTML = "");
  135. parent.append(table);
  136. }
  137. fetch("https://swapi.py4e.com/api/people/1/")
  138. .then((res) => res.json())
  139. .then((luke) => {
  140. drawTable({ data: luke });
  141. });
  142. //MYFETCH
  143. // function myfetch(url) {
  144. // return new Promise(function (resolve, reject) {
  145. // const xhr = new XMLHttpRequest();
  146. // xhr.open("get", url);
  147. // xhr.send();
  148. // xhr.onreadystatechange = (e) => {
  149. // if (xhr.readyState != 4) {
  150. // return;
  151. // }
  152. // if (xhr.status === 200) {
  153. // resolve(JSON.parse(xhr.responseText));
  154. // }
  155. // reject("some request error");
  156. // };
  157. // });
  158. // }
  159. // myfetch("https://swapi.py4e.com/api/people/1/").then(
  160. // (data) => console.log(data),
  161. // (err) => console.log("error ", err)
  162. // );
  163. //RACE
  164. // function myfetch(url) {
  165. // return new Promise(function (resolve, reject) {
  166. // const xhr = new XMLHttpRequest();
  167. // xhr.open("get", url);
  168. // xhr.send();
  169. // xhr.onreadystatechange = (e) => {
  170. // if (xhr.readyState != 4) {
  171. // return;
  172. // }
  173. // if (xhr.status === 200) {
  174. // resolve(JSON.parse(xhr.responseText));
  175. // }else{
  176. // reject("some request error");
  177. // }
  178. // };
  179. // });
  180. // }
  181. // const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
  182. // const race = async () => {
  183. // let rez = await Promise.race([
  184. // delay(Math.random() * 20),
  185. // myfetch("https://swapi.py4e.com/api/people/1/"),
  186. // ]);
  187. // console.log(rez);
  188. // };
  189. </script>
  190. </body>
  191. </html>