Относительные URL в запросах AJAX - PullRequest
32 голосов
/ 22 января 2011

Почему Javascript обрабатывает относительные URL-адреса иначе, чем стандартный HTML?Подумайте о следующем URL (или просто просмотрите его): http://en.wikipedia.org/wiki/Rome. Откройте консоль Firebug (или другую консоль Javascript) и введите следующее:

var x = new XMLHttpRequest();
x.open("GET", "foo", true);
x.send("bar");

В моей системе запрос отправляетсяto "http://en.wikipedia.org/wiki/foo"." Рим "в URL просто игнорируется. Тот же запрос с косой чертой в URL (" http://en.wikipedia.org/wiki/Rome/") добавляет "foo" к полному URL.

Похоже, это затрудняет кодирование правильных URL-адресов в Javascript. Существуют ли какие-либо библиотеки Javascript, которые помогут решить эту проблему?

(я задал похожий вопрос ранее,но более специфично для jQuery, где это также происходит. Надеюсь, я получу лучший ответ на этот несколько более независимый от библиотеки вопрос.)

Ответы [ 2 ]

55 голосов
/ 22 января 2011

(обновлено, чтобы сделать его более читабельным)

Так должны работать относительные пути.

Предположим, что текущий адрес таков:

Абсолют: protocol://some.domain.name/dir1/dir2/filename


Если вы укажете только новое имя файла "foo", вы получите тот же протокол, host и dirs, только имя файла будет изменено:

Относительный: foo

Абсолютный: protocol://some.domain.name/dir1/dir2/foo


Если указать полный путь "/ dir3 / filename2"вы получаете тот же протокол и имя хоста, но с другим путем:

Относительный: /dir3/filename2

Абсолютный: protocol://some.domain.name/dir3/filename2


Вы также можете указать имя хоста "//another.domain.name/dir5/filename3" и получить тот же протокол, но другой хост, dir и имя файла:

Относительный: //another.domain.name/dir5/filename3

Абсолют: protocol://another.domain.name/dir5/filename3


Что может сбить с толку, так это то, что веб-сервер внутри может добавить / в конце URL, еслиуказанный URL-адрес указывает на прямойа не в файл.

protocol://some.domain.name/somename

Если «somename» является каталогом, веб-сервер может перевести его (возможно с перенаправлением)

protocol://some.domain.name/somename/


ОБНОВЛЕНИЕ

Как Камерон сказано в комментарии: Для справки, см. Шаг 6 в разделе 4 RFC 1808

0 голосов
/ 27 января 2014

Похоже, http://code.google.com/p/js-uri/ - это библиотека выбора для манипулирования URL-адресами в целом и, в частности, для этого типа вычисления абсолютного или относительного:

new URI(potentiallyRelativeLink).resolve(new URI(window.location.href)).toString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...