• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JSON .open - błąd odnośnika

Object Storage Arubacloud
0 głosów
452 wizyt
pytanie zadane 21 października 2017 w JavaScript przez lastavenger Obywatel (1,060 p.)

Witam

Dopiero zaczynam przygodę z AJAX oraz JSON. Stworzyłem kod w którym łącze się z plikiem JSON na podstawie poradnika: https://www.youtube.com/watch?v=rJesac0_Ftw&t=1286s ... gdy wstawiam w .open() odnośnik do pliku podanego w poradniku wszystko jest ok i funkcja przechodzi dalej. Na potrzeby swojej strony stworzyłem własny plik JSON, lecz gdy podmieniam odnośniki na mój to wtedy pojawia się:

 

Gdy zmieniam http na https to pokazuje sie connection Timeout.

Wersja z poradnika: .open("GET", "https://learnwebcode.github.io/json-example/animals-1.json")

Wersja moja: .open("GET", "http://aventhelast.prv.pl/gallery_data.json")

$(".galleryImg").on("click", function () {
    
    var number = $(this).attr("number");
    var ourResponse = new XMLHttpRequest();
   
    ourResponse.open("GET", "https://learnwebcode.github.io/json-example/animals-1.json");
    ourResponse.onload = function(){
        
        var ourData = JSON.parse(ourResponse.responseText);
        renderHTML(ourData, number);
    };
    ourResponse.send();
});

 

1 odpowiedź

+3 głosów
odpowiedź 21 października 2017 przez Gynvael Coldwind Nałogowiec (27,530 p.)
wybrane 21 października 2017 przez lastavenger
 
Najlepsza

Problemem jest Same Origin Policy, czyli jedna z podstawowych polityk bezpieczeństwa w webie, która mówi, że domyślnie JavaScript ma dostęp tylko i wyłącznie do danych z tego samego kontekstu/źródła (ang. origin) definiowanego przez domenę (np. example.com) + port (np. 443) + protokół (np. HTTPS).

To znaczy tyle, że jeśli odpalasz Swój skrypt w kontekście https://example.com i w kodzie masz open na https://example.com/cośtam, to wszystko będzie działać. Ale jeśli zmienisz open na http://gynvael.coldwind.pl/cokolwiek, to działać przestanie (bo oba konteksty będą różne, więc dostęp zostanie zabroniony z uwagi na SOP).

Żeby umożliwić dostęp do różnych danych pomiędzy kontekstami serwer obcego kontekstu (tj. tego z którego JS próbuje pobrać dane) musi wyrazić na to zgodę poprzez wysłanie odpowiedniego nagłówka HTTP - nazywa się to Cross-Origin Resource Sharing (CORS) i jest dokładnie opisane np. na wiki - https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#Simple_example

Co oznacza mniej więcej tyle, że:

  1. Masz skrypt JS i plik JSON w różnych kontekstach.
  2. Nie "wysyłasz serwerem" odpowiednich nagłówków CORS dla JSONa.

Poprawić to możesz tez na dwa sposoby:

  1. Przenieść JSON na tą samą domenę+port+protokół w kontekście której uruchamiasz skrypt JS.
  2. Albo dodać nagłówki CORS po stronie serwera dla owego JSONa.

 

komentarz 21 października 2017 przez lastavenger Obywatel (1,060 p.)
Skorzystałem z 1 opcji.

Dodałem całość na Hosting, gdzie pojawia się: Failed to load resource: net::ERR_BLOCKED_BY_CLIENT

a linia kodu którą wstawiłem to:

.open("GET", "http://portfolio-aven.prv.pl/js/gallery_data.json");

Będę wdzięczny jeśli zerkniesz także u siebie na portfolio-aven.prv.pl
komentarz 21 października 2017 przez lastavenger Obywatel (1,060 p.)
zmieniłem odnośnika na: .open("GET", "js/gallery_data.json");

i wszystko działa, ale nie jestem pewien czy tak powinno się robić.
komentarz 21 października 2017 przez Gynvael Coldwind Nałogowiec (27,530 p.)
Jest OK - możesz dodać jeszcze / z przodu, tj "/js/gallery_data.json", dzięki temu ścieżka będzie bezwzględna, tj. podstrony w innych katalogach też będą szukać danych w tym samym miejscu, a nie w podkatalogu "js" względem miejsca umieszczenia podstrony.
komentarz 21 października 2017 przez lastavenger Obywatel (1,060 p.)
Dzięki wielkie za pomoc, sporo się dowiedziałem. Pozdrawiam

Podobne pytania

0 głosów
2 odpowiedzi 483 wizyt
pytanie zadane 1 maja 2021 w JavaScript przez ShockWave Bywalec (2,350 p.)
0 głosów
1 odpowiedź 611 wizyt
pytanie zadane 14 maja 2017 w JavaScript przez Raptowny Początkujący (420 p.)
0 głosów
1 odpowiedź 487 wizyt

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...