#javascript #xmlhttprequest
#javascript #xmlhttprequest
Вопрос:
Я пытаюсь запросить несколько ошибочный API, который требует, чтобы некоторые символы были закодированы в URL (в моем случае, точка .вызывает проблему)
GET /projects/:projectid/merge_requests
С project_id, поскольку groupname/project.name
API нуждается в urlencoded (включая точку), в противном случае он отвечает 404
Правильный URL-адрес /projects/groupname/project.name/merge_requests
В настоящее время я выполняю замену вручную, но, похоже, браузер думает, что я не знаю, чем я заменяю . .в фактическом запросе. И поэтому я не могу запросить свой API
Текущий код выглядит так:
var projectid = 'foo/bar.baz';
projectid = encodeURIComponent(projectid).replace(/[.]/g, '.');
var url = 'http://gitlab.local/api/v3/projects/' projectid '/merge_requests'
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = 'json';
xhr.addEventListener('load', mycallback);
xhr.send();
// -> GET http://gitlab.local/api/v3/projects/foo/bar.baz/merge_requests 404 ()
Есть ли какой-либо способ заставить URL-адрес отправляться буквально, а не преобразовываться браузером?
(У меня такое же поведение в Chrome и Firefox)
Ответ №1:
Вместо .
замените его на %2E
. .
это escape-код для .
, поэтому он будет интерпретировать его как точку. Что вам нужно, так это экранировать %
, и это то, что %
делает. Когда неэкранированный, %2E
становится .
.
Комментарии:
1. К сожалению,
%2E
отправляется на сервер как есть :/