Как отправить данные в тело запроса с помощью GET при использовании jQuery $.ajax() - программирование
Подтвердить что ты не робот

Как отправить данные в тело запроса с помощью 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
});

Кто-нибудь знает, как я могу принудительно отправить значение "данных" в тело запроса? Любая помощь приветствуется, спасибо заранее.

4b9b3361

Ответ 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);
});