Zaskoczyło mnie już doświadczenie związane ze względnymi ścieżkami w Javascript. Mam sprowadzić sytuację do następującego:Względne ścieżki z pobieraniem w JavaScript
Załóżmy, że masz strukturę katalogów jak:
app/
|
+--app.html
+--js/
|
+--app.js
+--data.json
Wszystkie moje app.html
nie jest prowadzony js/app.js
<!DOCTYPE html>
<title>app.html</title>
<body>
<script src=js/app.js></script>
</body>
app.js
ładuje plik JSON i wstawiono go na początku body
:
// js/app.js
fetch('js/data.json') // <-- this path surprises me
.then(response => response.json())
.then(data => app.data = data)
Dane są ważne JSON, tylko ciąg:
"Hello World"
Jest to dość minimalne wykorzystanie fetch
, ale jestem zaskoczony, że adres URL, które mijam na fetch
musi być w stosunku do app.html
zamiast w stosunku do app.js
. Spodziewam się, to droga do pracy, ponieważ data.json
i app.js
są w tym samym katalogu (js/
):
fetch('data.json') // nope
Czy istnieje wyjaśnienie, dlaczego tak jest?
JS może pochodzić z miejsc, których folderów nie można wskazać ze względu na SOP, więc zawsze był zależny od strony. – dandavis
Pamiętaj, że to nie ma wiele wspólnego z JavaScriptem; to sposób, w jaki przeglądarki internetowe interpretują ścieżki w żądaniach HTTP. Strona główna definiuje kontekst URL dla wszystkiego: odniesienia do skryptów, obrazy, arkusze stylów i XHR. – Pointy
Cześć, ponieważ ścieżki wartości CSS nie działają w ten sposób, są względne w stosunku do katalogu źródłowego arkusza stylów - jeśli masz, powiedzmy, body {background-image: url (pic.gif)} w css/styles.css, wtedy przeglądarka będzie szukała pic.gif w css /, nie /. Takie zachowanie można oczekiwać po JS, ale najwyraźniej nie jest to prawda. – pat