ηλί, ηλί, λαμά σαβαχθανί!?
Rest API fråga
Hej!
Försöker komma åt json-filen från ett API. Jag kan se den helt och hållet att allt fungerar som det ska när jag går in på urln med rätt via webbläsaren som vilken adress som helst.
Använder en mall för ajax anrop från andra små projekt så det bör fungera. Men jag får felmeddelandet i konsolen hela tiden: Access to XMLHttpRequest at 'api-urln' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Koden jag använder är (har bytt ut min url då den har privata nycklar osv i sig):
function requestData () {
var request = new XMLHttpRequest()
request.open('GET', 'api-urln', true)
request.send(null)
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
showInformation(request.responseText)
}
}
}
function showInformation (response) {
response = JSON.parse(response)
console.log(response)
}
Någon som har någon aning om varför det inte fungerar för mig? tack på förhand!
Du kan testa lägga till,
request.withCredentials = true;
Innan du skickar din request.
Någon anledning till att du använder xhr över fetch?
CORS har att göra med att du försöker kontakta en domän som inte ligger på den du kontaktar från. Browsern blockerar sådanna requests av säkerhetsskäl.
Exempel med fetch:
async function fetchJSONData(url)
{
const res = await fetch(url);
const json = await res.json();
return json;
}
Hej!
Försöker komma åt json-filen från ett API. Jag kan se den helt och hållet att allt fungerar som det ska när jag går in på urln med rätt via webbläsaren som vilken adress som helst.
Använder en mall för ajax anrop från andra små projekt så det bör fungera. Men jag får felmeddelandet i konsolen hela tiden: Access to XMLHttpRequest at 'api-urln' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Koden jag använder är (har bytt ut min url då den har privata nycklar osv i sig):
function requestData () {
var request = new XMLHttpRequest()
request.open('GET', 'api-urln', true)
request.send(null)
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
showInformation(request.responseText)
}
}
}
function showInformation (response) {
response = JSON.parse(response)
console.log(response)
}
Någon som har någon aning om varför det inte fungerar för mig? tack på förhand!
Det fungerar inte för att Javascript (browsers) tvingar en strikt CORS, mer specifikt Access-Control-Allow-Origin.
Det går att komma runt på flera sätt men allt är egentligen ganska komplicerat förutom JSONP och kanske iframe-meckande, vilket har sina nackdelar för sig. Att lägga in ACAO på servern är det rätta svaret, att göra en egenmeckad proxy ett alternativt svar.
Rent generellt kan man säga att de som har skrivit APIet inte vill att man använder client-side Javascript för att anropa/använda det.
Detta förstärks mer eftersom din url har koder/nycklar i sig vilket inte är lämpligt att ha client-side då vem som helst då kan få tag på dessa.
Om du enbart gör detta för något test så kan man starta browsern i "osäkert läge" vilket tillåter att man går runt dessa CORS-restriktioner.
Det fungerar inte för att Javascript (browsers) tvingar en strikt CORS, mer specifikt Access-Control-Allow-Origin.
Det går att komma runt på flera sätt men allt är egentligen ganska komplicerat förutom JSONP och kanske iframe-meckande, vilket har sina nackdelar för sig. Att lägga in ACAO på servern är det rätta svaret, att göra en egenmeckad proxy ett alternativt svar.
Rent generellt kan man säga att de som har skrivit APIet inte vill att man använder client-side Javascript för att anropa/använda det.
Detta förstärks mer eftersom din url har koder/nycklar i sig vilket inte är lämpligt att ha client-side då vem som helst då kan få tag på dessa.
Om du enbart gör detta för något test så kan man starta browsern i "osäkert läge" vilket tillåter att man går runt dessa CORS-restriktioner.
Oj låter väldigt mycket mer avancerat än vad jag har förståelse för... Men jag tackar så mycket för informationen!
- En allmän fråga4
- Vad har hänt med bredbandspriserna inom stadsnät? Löpt amok!1
- SweClockers får efterlängtade forumfunktioner11
- Apple kan släppa supertunn, superdyr Iphone 202541
- Diablo IV – den stora tråden3723
- Liberalerna: Förbjud anonyma partikonton75
- Köpa speldator för första gången.8
- Formel 1-tråden8993
- Gräva ner TP kabel65
- Kontakter från gmail sparas automatiskt i kontakter på mobilen3
- Köpes Keychron K7
- Köpes AM4/AM5 bracket för gammal Corsair (H110)
- Köpes Razer Core X
- Säljes MSI Optix 24" 144Hz samt LG 34" 34WN750 Ultrawide
- Köpes Billig am4/ryzen köpes för biosuppdatering
- Säljes Oculus quest 3 inklusive tillbehör
- Säljes Asus GeForce RTX 2060 OC 6GB Dual
- Säljes Corsair RM850x, Obruten förpackning
- Säljes 2st Samsung m.2 ssd säljes
- Köpes Datorchassi Phanteks Evolv Shift X eller liknande sökes
- SweClockers får efterlängtade forumfunktioner11
- Moddat 4070 Ti Super snabbare än 4080 Super7
- Snabbkoll: Delar du ditt streamingkonto?40
- Liberalerna: Förbjud anonyma partikonton76
- TCL bygger skärmprototyp med 1 000 Hz46
- Apple kan släppa supertunn, superdyr Iphone 202541
- Kodare knäcker PS4 med LG-TV11
- Ghost of Tsushima kan använda DLSS och FSR 3 samtidigt11
- Internets första sökmotor återuppstår14
- Tre år gammal processor sätter hastighetsrekord7