Подтвердить что ты не робот

JQuery, отправьте объект JSON с использованием метода GET

Я пытаюсь отправить объект json с использованием метода GET. Мой код:

$.ajax({
           url: "/api/endpoint",
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

Однако полученные заголовки имеют значение "Content-Length" равным нулю, поэтому мой json-парсер на сервере не читает содержимое.

Я уже пробовал устанавливать заголовок длины содержимого, но он все равно приходит на сервер как ноль:

$.ajax({
           url: "/api/endpoint",
           headers: {"CONTENT_LENGTH",JSON.stringify({"sort":"date"}).length},
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

Любая идея, как это сделать? Он должен быть запросом GET.

4b9b3361

Ответ 1

Запросы GET (как минимум обычно) не имеют тела сообщения. Как упоминалось в docs, jQuery добавляет data запросов GET к параметрам url. Вы должны быть в состоянии прочитать свой параметр sort там с вашим серверным приложением.

BTW, ни один пользовательский агент не позволит вам установить заголовок Content-Length - он будет (и должен) выполняться автоматически в зависимости от отправленных данных.

Ответ 2

Есть несколько мест, где вы немного ошибались.

  • Это не CONTENT_LENGTH, его Content-Length.
  • Не устанавливайте заголовок Content-Length, браузер сделает это за вас.
  • Получить запрос имеет длину содержимого = 0.

Что-то вроде ниже должно работать для вас:

$.ajax({
     url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})),
     type: "GET",
     ...
});

Ответ 3

Я думаю, вы должны использовать JSON.stringify для параметров GET в URL-адресе следующим образом:

$.ajax({
           url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}),
           type: "GET",
           contentType: "application/json",
           dataType: "json",
           ...

Ответ 4

Как упоминалось Bergi, данные преобразуются jQuery.ajax() для запроса параметров. Из jQuery 1.7.2:

// Determine if request has content
s.hasContent = !rnoContent.test( s.type );    --> false when s.type == "GET'

...

if ( !s.hasContent ) {
    // If data is available, append data to url
    if ( s.data ) {
        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
        // #9682: remove data so that it not used in an eventual retry
        delete s.data;
    }