Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите, как оформить работающую функцию FETCH (https://javascript.ru/forum/misc/82180-podskazhite-kak-oformit-rabotayushhuyu-funkciyu-fetch.html)

Konstantin47 27.03.2021 23:03

Подскажите, как оформить работающую функцию FETCH
 
(async () => {
    const response = await fetch('https://api.spacexdata.com/v4/starlink/');
    const data = await response.json();
    for(const starlink of data) {
        document.write(`<p>${starlink.id}</p>`);
    }
})();


Это работает, но
как можно это оформить в виде функции с именем, чтобы повесить onclick?

мне вот это вступление покоя не даЕт (async () (с)
эта часть с примера - просто function name(){ и вся фунцкия пробовал, но не работает)}
до этого я подходил вообще так
const textButton = document.getElementById('number');

const outputDiv = document.getElementById('output');

const textURL = 'https://api.spacexdata.com/v4/starlink';


textButton.addEventListener('click', () => {
    fetch(textURL)
        .then( response => {
            outputDiv.innerHTML = 'Proszę poczekać';
            if(response.ok) {
                return response;
            } throw Error(response.statusText);
        })
        .then( response => response.text() )
        .then( text => outputDiv.innerText = text )
        .catch( error => console.log('There was an error:', error))
},	false);


работает и клик работает, но оказалось, нельзя через текст

Cпасибо

ksa 27.03.2021 23:11

Цитата:

Сообщение от Konstantin47
как можно это оформить в виде функции с именем, чтобы повесить onclick?

Как вариант..

<!DOCTYPE html>
<html>
<head>
<!--
<script src='https://code.jquery.com/jquery-latest.min.js'></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>

document.addEventListener("DOMContentLoaded", () => {
	document.getElementById('btn').addEventListener('click',test)
	function test() {
		alert(1)
		/*
		(async () => {
			const response = await fetch('https://api.spacexdata.com/v4/starlink/');
			const data = await response.json();
			for(const starlink of data) {
				document.write(`<p>${starlink.id}</p>`);
			}
		})();
		*/
	}
})

</script>
</head>
<body> 
<button id='btn'>Ok</button>
</body>
</html>

рони 27.03.2021 23:17

Konstantin47,
создавайте свои темы здесь Общие вопросы Javascript

рони 27.03.2021 23:33

Konstantin47,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
document.addEventListener( "DOMContentLoaded" , function() {
const spacex = async () => {
    const response = await fetch('https://api.spacexdata.com/v4/starlink/');
    let data = await response.json();
    data = data.map(({id}) => `<p>${id}<\/p>`).join('');
    out.insertAdjacentHTML('beforeend', data)
};
    btn.addEventListener('click', spacex)
  });
    </script>
</head>
<body>
<button id='btn'>Ok</button>
<output id="out"></output>
</body>
</html>

voraa 27.03.2021 23:40

А какие тут вообще проблемы?
<!DOCTYPE html>
<html>
<head>
<script>
async function test() {
	const response = await fetch('https://api.spacexdata.com/v4/starlink/');
	const data = await response.json();
	for(const starlink of data) {
		document.write(`<p>${starlink.id}</p>`);
	}
}
</script>
</head>
<body>
<button id='btn' onclick="test()">Ok</button>
</body>
</html>

Konstantin47 27.03.2021 23:49

где - создавать темы, понял. Спасибо большое всем за помощь

Konstantin47 30.03.2021 11:12

Можно спросить, вот два варианта открывания информации. Почему через JSON показывает массив с ID номерами и все. Если зайти через консоль откроет тоже самое , что и через text. Что за это отвечает? какая строчка


<button id='number'>identyfikatory,nazwę,datę wystrzelenia</button>
<button id='btn'>identyfikatory,nazwę,datę wystrzelenia2</button>
<output id="out"></output>
<div id='output'>


const textButton = document.getElementById('number');

const outputDiv = document.getElementById('output');

const textURL = 'https://api.spacexdata.com/v4/starlink';


textButton.addEventListener('click', () => {
    fetch(textURL)
        .then( response => {
            outputDiv.innerHTML = 'Proszę poczekać';
            if(response.ok) {
                return response;
            } throw Error(response.statusText);
        })
        .then( response => response.text() )
        .then( text => outputDiv.innerText = text )
        .catch( error => console.log('There was an error:', error))
},	false);

document.addEventListener( "DOMContentLoaded" , function() {
const spacex = async () => {
    const response = await fetch('https://api.spacexdata.com/v4/starlink/');
	
    let data = await response.json();
    data = data.map(({id}) => `<p>${id}<\/p>`).join('');
    out.insertAdjacentHTML('beforeend', data)
};
    btn.addEventListener('click', spacex)
  });

voraa 30.03.2021 11:53

А что передается с сервера?

Что у вас открывается и что в консоле, при таком оформлении примера мы не увидим.

Aetae 30.03.2021 23:34

Konstantin47, очевидно за показ только id отвечает строка в которой показывают только id:
data = data.map(({id}) => `<p>${id}<\/p>`).join('');


P.S. document.write? Серьёзно? Пацаны, вы чего? Konstantin47, забудь об этом дерьме пока молодой, станешь сеньёром - тогда можешь юзать.)

Konstantin47 31.03.2021 13:09

Цитата:

Сообщение от Aetae (Сообщение 535074)
Konstantin47, очевидно за показ только id отвечает строка в которой показывают только id:
data = data.map(({id}) => `<p>${id}<\/p>`).join('');


P.S. document.write? Серьёзно? Пацаны, вы чего? Konstantin47, забудь об этом дерьме пока молодой, станешь сеньёром - тогда можешь юзать.)

PS простите, а, что юзать пока молодой?


Часовой пояс GMT +3, время: 21:44.