2016-08-31 5 views
4

Я использую Fetch (Fetch API) в проекте, и я хотел бы в целях последовательности создать функцию, которая получает все параметры, такие как метод, url и data и создает правильный запрос, в зависимости от запроса GET или POST.Использовать выборку для отправки запроса на получение с объекта данных

Возможно ли, используя Fetch, отправить объект данных, который для запроса GET, преобразует данные и строит их с параметрами, и если это запрос POST, он просто отправляет объект данных в тело?

Это будет выглядеть следующим образом:

fetch ('/test', { 
     method: 'GET', 
     data: { 
      test: 'test' 
     } 
}); 

Это сомнение был вдохновлен этим JQuery поведение Ajax:

$.ajax({ 
    url: '/test', 
    method: 'GET', 
    data: { 
     test: 'test' 
    } 
}); 

Это будет производить этот запрос:

'/test/?test=test' 
+1

Ну, да, это возможно. Но каков ваш вопрос? (обратите внимание: вы знаете, что IE и сафари не поддерживают это?) – giorgio

+0

Да, я знаю, это просто эксперимент :) Мой вопрос: Если я передаю объект данных как нормально в конструкторе выборки для запроса GET, отправит ли он запрос, как в примере, который я дал «/ test /? test = test»? –

+3

[Вы попробовали] (https://i.imgur.com/buUeJ0c.jpg)? –

ответ

5

Если Я передаю объект данных как обычно в конструкторе выборки для запрос GET, будет ли это отправить запрос, как пример, который я дал '/ тест/тест = тест?

Если вы хотите добавить строку запроса к выборки запроса:

From the SPEC

var url = new URL("https://a.com/method"), 
params = {a:1, b:2} 
Object.keys(params).forEach(key => url.searchParams.append(key, params[key])) 
fetch(url) 

это произведет запрос:

enter image description here

1

можно либо использовать Url класс:

var url = new URL("/test/") 
Object.keys({test: 'test', a: 1}).forEach(key => url.searchParams.append(key, params[key])) 
fetch(url); 

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

var params = {test: 'test', a: 1}, 
 
    qs = Object.keys(params).reduce(function(_qs, k, i){ return _qs + '&' + k + '=' + params[k]; }, '').substring(1); 
 

 
console.log(qs)

Смежные вопросы