RomanR 4 years ago
commit
d736002995
3 changed files with 152 additions and 0 deletions
  1. 15 0
      js13_Romanenko/index.html
  2. 90 0
      js13_Romanenko/script.js
  3. 47 0
      js13_Romanenko/style.css

+ 15 - 0
js13_Romanenko/index.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <link rel="stylesheet" href="style.css">
+</head>
+<body>
+    <div class="tablica"></div>
+    <script type='text/javascript' src='./script.js'></script>
+</body>
+</html>
+<!-- Примечание: везде нужно убирать пустые строки, если 
+    div изначаьно пустой,--писать его в одну строку, иначе будет баги -->

+ 90 - 0
js13_Romanenko/script.js

@@ -0,0 +1,90 @@
+// fetch basic && fetch improved //
+
+const lukeURL = 'https://swapi.dev/api/people/1/'
+
+var tablica = document.querySelector('.tablica')
+
+function fetchBasic(domElem, url) {
+    fetch(url)
+        .then(res => res.json())
+        .then(data => {
+            let table = document.createElement('table');
+            domElem.appendChild(table);
+            let thead = document.createElement('thead');
+            let trThead = document.createElement('tr');
+            thead.appendChild(trThead);
+            table.appendChild(thead);
+            let tr = document.createElement('tr');
+            table.appendChild(tr);
+            for (let index in data) {
+                let tdThead = document.createElement('td');
+                tdThead.innerText = index;
+                // thead.appendChild(tdThead);
+                trThead.appendChild(tdThead);
+                let td = document.createElement('td');
+                // https://swapi.dev/api/    '/\https:\//\swapi\.\dev\/\api/\/'    /https:\//\swapi\.\dev/api/\/
+                if (typeof data[index] == 'string' && data[index].match(/http(?:s?):\/\/(?:www\.)?swapi\.dev\/api\//)) {
+                    let button = document.createElement('button');
+                    button.innerText = 'Show';
+                    td.appendChild(button);
+                    button.addEventListener('click', function () {
+                        domElem.firstChild.remove();
+                        fetchBasic(domElem, data[index]);
+                        // console.log(domElem)
+                    })
+                } else if (typeof data[index] == 'object') {
+                    console.log(data[index])
+                    for (let i = 0; i < data[index].length; i++) {
+                        let button = document.createElement('button');
+                        button.innerText = `Show ${i + 1}`;
+                        td.appendChild(button);
+                        button.addEventListener('click', function () {
+                            domElem.firstChild.remove();
+                            fetchBasic(domElem, data[index][i]);
+                            // console.log(data[index][i]);
+                        })
+                    }
+                } else {
+                    td.innerText = data[index];
+                }
+                tr.appendChild(td);
+            };
+        });
+};
+fetchBasic(tablica, lukeURL);
+
+
+// myfetch
+
+function myfetch(url) {
+    return new Promise(function (resolve, reject) {
+        // let start = performance.now();
+        const xhr = new XMLHttpRequest();
+            xhr.open('GET', url, true);
+            xhr.responseType = 'json';
+            xhr.send();
+            xhr.onload = function(){
+                if (xhr.status != 200) { 
+                    alert(`Ошибка ${xhr.status}: ${xhr.statusText}`); 
+                  } else { 
+                        resolve(xhr.response);
+                  };
+            };
+            xhr.onerror = function(){
+                reject(xhr.response);
+            }
+            // let stop = performance.now();
+
+            // let time = stop - start;
+            // console.log(time);
+    });
+};
+
+myfetch(lukeURL)
+    .then(luke => console.log(luke))
+
+const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
+
+  
+Promise.race([myfetch(lukeURL), delay(75)])
+.then((value) => console.log('value', value))  

+ 47 - 0
js13_Romanenko/style.css

@@ -0,0 +1,47 @@
+thead td{
+     padding: 10px;
+     background-color: #ce3f3f;
+     border: 1px solid black;
+}
+/* table   {
+    border: 1px solid black;
+}
+td{
+    padding: 10px;
+    border: 1px solid black;
+} */
+
+
+
+table {
+    border-spacing: 0px;
+    border: 1px solid black;
+    margin: 10px;
+  }
+  
+  /* tr {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: fle;
+  } */
+  
+  td {
+    text-align: center;
+    /* width: 30px;
+    height: 25px; */
+    border: 1px solid black;
+    background-color: #e4978a;
+  }
+  
+  input,
+  button,
+  label {
+    margin: 10px;
+  }
+  
+
+  
+  /* label {
+    margin-right: 35px;
+    margin-left: 37px;
+  } */