Запрос XHR с буквальным URL

#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 отправляется на сервер как есть :/