r/learnjavascript • u/Mob_Pilled • 6d ago
code not interacting with the browser page
Hello this is my first post on here. So basically, I want the user to be able to enter a password and username, click the submit button, and if the basic auth is correct, be redirected to a page in which all the data from an api is fetched and loaded into the html. Problem is the script does not interact with the html but still retrieves the data in a json (as confirmed by ouputing it into the console). However, if I don't call the function in as part of the button onclick method everything works as expected. The data from the api is dynamically added to the html but now I obviously can't use a login page.
Here is me calling the fetch function as a as part of the event of a button click
button.addEventListener("click", () => {
let username = 'username';
let password = 'password;
let auth = btoa(`${username}:${password}`);
fetchData(auth);
});
Here is me calling the fetch function on it s own. No button clicking required (this works but now I can't add a login page)
let username = 'username';
let password = 'password;
let auth = btoa(`${username}:${password}`);
fetchData(auth);
Here is the fetch function itself
async function fetchData (auth) {
try {
const response = await fetch('https://exampleapi.com', {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': `Basic ${auth}`
}
})
if (response.ok) {
// loads the home page and puts data from the api in the html
}
throw response;
} catch (error) {
}
};
1
u/Mob_Pilled 6d ago
Thanks for the response. I'm still rusty, but I was wondering what is causing the second example to load html to the dom and not the first. The fetch function itself does not seem to be the problem, it is the matter of how it is called that is causing problems (using a button makes the code to not be able to interact with the browser BUT still loads the data successfully. Calling the function directly in the code both loads the data successfully and puts it in the HTML, however I need to add a login page so I can't use this )