Как отправить данные в тело запроса с помощью GET при использовании jQuery $.ajax()
API-интерфейс службы, который я потребляю, имеет определенный метод GET, который требует отправки данных в тело запроса.
Данные, необходимые в теле, представляют собой список идентификаторов, разделенных hypen, и могут потенциально быть очень большими и, следовательно, они должны быть отправлены в тело, иначе он, вероятно, будет находиться где-то в сети браузеров/прокси/веб-серверов и т.д. Примечание. У меня нет контроля над сервисом или API, поэтому, пожалуйста, не делайте предложений по его изменению.
Я использую следующий код jQuery, но наблюдая за запросом/ответом в скрипаче, я вижу, что "данные", которые я отправляю, ВСЕГДА преобразуются и добавляются в строку запроса, несмотря на то, что я устанавливаю параметр "processData" на false..
$.ajax({
url: "htttp://api.com/entity/list($body)",
type: "GET",
data: "id1-id2-id3",
contentType: "text/plain",
dataType: "json",
processData: false, // avoid the data being parsed to query string params
success: onSuccess,
error: onError
});
Кто-нибудь знает, как я могу принудительно отправить значение "данных" в тело запроса?
Любая помощь приветствуется, спасибо заранее.
Ответы
Ответ 1
В общем, это не то, как системы используют запросы GET. Таким образом, ваши библиотеки будут трудно играть. Фактически, spec говорит, что "если метод запроса является аргументом, чувствительным к регистру для GET или HEAD, как если бы данные были пустыми". Итак, я думаю, вам не повезло, если браузер, который вы используете, не уважает эту часть спецификации.
Возможно, вы можете настроить конечную точку на своем сервере для запроса ajax POST, а затем перенаправить это в код сервера на запрос GET с телом.
Если вы не полностью привязаны к запросам GET с телом, являющимся данными, у вас есть два варианта.
POST с данными: Это, вероятно, то, что вы хотите. Если вы передаете данные, это, вероятно, означает, что вы модифицируете некоторую модель или выполняете некоторые действия на сервере. Эти типы действий обычно выполняются с помощью запросов POST.
GET с данными строки запроса:. Вы можете преобразовать свои данные в параметры строки запроса и передать их на сервер таким образом.
url: 'somesite.com/models/thing?ids=1,2,3'
Ответ 2
Вы можете отправить свои данные как запрос "POST" через "HEADERS".
Что-то вроде этого:
$.ajax({
url: "htttp://api.com/entity/list($body)",
type: "GET",
headers: ['id1':1, 'id2':2, 'id3':3],
data: "",
contentType: "text/plain",
dataType: "json",
success: onSuccess,
error: onError
});
Ответ 3
На всякий случай, если кто-то все еще задается этим вопросом:
В любом запросе есть объект запроса тела. Вам не нужно разбирать его самостоятельно.
Например, если вы хотите отправить accessToken от клиента с помощью GET, вы можете сделать это следующим образом:
const request = require('superagent');
request.get('http://localhost:3000/download?accessToken=${accessToken}').end((err, res) => {
if (err) throw new Error(err);
console.log(res);
});