Vinnaren i pepparkakshustävlingen!
2018-05-08, 02:47
  #1
Medlem
Flaskhalsats avatar
Har precis börjat lära mig JS på allvar och har tänkt att göra en simpel hemsida som visar data från en öppen API.

Jag stöter då på felet att "No 'Access-Control-Allow-Origin'" och efter flertalet timmars googlande och dylikt är jag inte ett uns klokare. Vad jag kan förstå är det för att förhindra hämtandet på något visst sätt men informationen är knapphändig eller överväldigande om problemet.

Hur får jag bort problemet?
__________________
Senast redigerad av Flaskhalsat 2018-05-08 kl. 02:53.
Citera
2018-05-08, 03:41
  #2
Medlem
Jag föreslår att du läser manualen som finns till API:t. Ur den framgår det hur den fungerar och vad du behöver.
Citera
2018-05-08, 04:00
  #3
Medlem
Flaskhalsats avatar
Citat:
Ursprungligen postat av DJ-Emerald
Jag föreslår att du läser manualen som finns till API:t. Ur den framgår det hur den fungerar och vad du behöver.

Problemet är att det inte finns en manual till API:t och jag vet inte alls hur man löser problemet.
Citera
2018-05-08, 05:56
  #4
Medlem
Citat:
Ursprungligen postat av Flaskhalsat
Problemet är att det inte finns en manual till API:t och jag vet inte alls hur man löser problemet.

Vad är det för API? Det bör ju antingen finnas en hemsida för den med tillhörande information och kanske diskussionsforum, eller så finns det väl i varje fall minst en readme-fil när du laddade ned den?
Citera
2018-05-08, 06:00
  #5
Medlem
Flaskhalsats avatar
Citat:
Ursprungligen postat av DJ-Emerald
Vad är det för API? Det bör ju antingen finnas en hemsida för den med tillhörande information och kanske diskussionsforum, eller så finns det väl i varje fall minst en readme-fil när du laddade ned den?

Jag valde bara en API från öppna data och det var polisens men oavsett vilken jag än väljer och hur jag än sorterar CSV-filen så får jag alltid samma fel.
Citera
2018-05-08, 06:22
  #6
Medlem
Citat:
Ursprungligen postat av Flaskhalsat
Jag valde bara en API från öppna data och det var polisens men oavsett vilken jag än väljer och hur jag än sorterar CSV-filen så får jag alltid samma fel.

Hur ser din kod ut?

Jag är ingen haj på just JS, men jag fick det att fungera på mitt sätt:
Kod:
$curl -"Accept: application/json" 'https://polisen.se/api/events?locationname=Stockholm;J%C3%A4rf%C3%A4lla' 
Citera
2018-05-08, 07:42
  #7
Medlem
Citat:
Ursprungligen postat av Flaskhalsat
Har precis börjat lära mig JS på allvar och har tänkt att göra en simpel hemsida som visar data från en öppen API.

Jag stöter då på felet att "No 'Access-Control-Allow-Origin'" och efter flertalet timmars googlande och dylikt är jag inte ett uns klokare. Vad jag kan förstå är det för att förhindra hämtandet på något visst sätt men informationen är knapphändig eller överväldigande om problemet.

Hur får jag bort problemet?

Det handlar inte om APIet i sig, det handlar om att webbservern du hämtar data ifrån inte är förberedd för att datat ska konsumeras på en annan sajt. Detta kollas av din webbläsare (som du visar den andra, din egna, sida i) som säger ifrån. Same-origin policy gäller fortfarande för JavaScript och det hela handlar bland annat om att försöka förhindra XSS- attacker.

Läs https://www.google.se/amp/s/jvaneyck...avascript/amp/ och kolla speciellt på delen om JSONP. Det är ett hack men det är egentligen vad du vill göra också.
Citera
2018-05-08, 08:46
  #8
Medlem
Flaskhalsats avatar
Citat:
Ursprungligen postat av DJ-Emerald
Hur ser din kod ut?

Jag är ingen haj på just JS, men jag fick det att fungera på mitt sätt:
Kod:
$curl -"Accept: application/json" 'https://polisen.se/api/events?locationname=Stockholm;J%C3%A4rf%C3%A4lla' 

Jag skickade ett PM.
Citera
2018-05-08, 11:23
  #9
Medlem
kodsnickrarns avatar
Precis som luxnest skriver så är detta en säkerhetsåtgärd som finns i din browser - den tillåter inte ett anrop mot en 3:e parts server om inte denna skickar med speciella headers i sitt svar som talar om att "det är ok".

API:et är förmodligen inte tänkt att anropas direkt från en browser utan förmodligen från en annan server.

Ett enkelt sätt är att du bygger en egen "proxy" som körs på *din* server och som sedan utför API-anropen "åt dig".

Alltså: din javascriptkod anropar funktioner i *din* server (python, php, C# eller vad du nu bygger i) som i sin tur anropar API:erna hos 3:e part.

/K
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback