새로운 Fetch API 를 사용하려고합니다 .
나는 GET
이런 요청을하고있다 :
var request = new Request({
url: 'http://myapi.com/orders',
method: 'GET'
});
fetch(request);
그러나 GET
요청에 쿼리 문자열을 추가하는 방법을 잘 모르겠습니다 . 이상적으로 GET
는 다음 URL
과 같은 요청을 할 수 있기를 원합니다 .
'http://myapi.com/orders?order_id=1'
에서 jQuery
나는 통과하여이 작업을 수행 할 수 {order_id: 1}
는 AS data
의 매개 변수 $.ajax()
. 새로운 것과 동등한 방법이 Fetch API
있습니까?
답변
2017 년 3 월 업데이트 :
URL.searchParams 지원은 공식적으로 Chrome 51에 제공되었지만 다른 브라우저에는 여전히 polyfill이 필요합니다 .
쿼리 매개 변수를 사용 하는 공식적인 방법은 URL에 매개 변수를 추가하는 것입니다. 에서 사양 ,이 예입니다 :
var url = new URL("https://geo.example.org/api"),
params = {lat:35.696233, long:139.570431}
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))
fetch(url).then(/* … */)
그러나 Chrome searchParams
에서 URL 작성 기능을 지원하는지 확실하지 않으므로 (제작 시점에) 타사 라이브러리 또는 롤업 솔루션을 사용할 수 있습니다.
2018 년 4 월 업데이트 :
URLSearchParams 생성자 를 사용 하면 2D 배열이나 객체를 할당하고 url.search
모든 키를 반복 하는 대신 할당 할 수 있습니다.
var url = new URL('https://sl.se')
var params = {lat:35.696233, long:139.570431} // or:
var params = [['lat', '35.696233'], ['long', '139.570431']]
url.search = new URLSearchParams(params).toString();
fetch(url)
URLSearchParams
사이드 노트 : NodeJS에서도 사용 가능
const { URL, URLSearchParams } = require('url');
답변
let params = {
"param1": "value1",
"param2": "value2"
};
let query = Object.keys(params)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
.join('&');
let url = 'https://example.com/search?' + query;
fetch(url)
.then(data => data.text())
.then((text) => {
console.log('request succeeded with JSON response', text)
}).catch(function (error) {
console.log('request failed', error)
});
답변
이미 대답했듯이 이것은 fetch
아직 -API로는 불가능합니다 . 그러나 나는 주목해야한다 :
당신이있는 경우 node
는 거기에 querystring
패키지로 제공된다. 객체 / 쿼리 문자열을 문자열 화 / 파싱 할 수 있습니다 :
var querystring = require('querystring')
var data = { key: 'value' }
querystring.stringify(data) // => 'key=value'
… 요청하기 위해 URL에 추가하십시오.
그러나 위의 문제는 항상 물음표 ( ?
) 를 앞에 붙여야한다는 것 입니다. 따라서 다른 방법은 parse
노드 url
패키지 의 메소드 를 사용하여 다음과 같이 수행하는 것입니다.
var url = require('url')
var data = { key: 'value' }
url.format({ query: data }) // => '?key=value'
보기 query
에 https://nodejs.org/api/url.html#url_url_format_urlobj
내부적으로 다음과 같이 가능 합니다 .
search = obj.search || (
obj.query && ('?' + (
typeof(obj.query) === 'object' ?
querystring.stringify(obj.query) :
String(obj.query)
))
) || ''
답변
간결한 ES6 접근 방식 :
fetch('https://example.com?' + new URLSearchParams({
foo: 'value',
bar: 2,
}))
URLSearchParams의 toString () 함수는 쿼리 인수를 URL에 추가 할 수있는 문자열로 변환합니다. 이 예제에서 toString ()은 URL과 연결될 때 암시 적으로 호출됩니다.
IE는 URLSearchParams를 지원하지 않지만 사용 가능한 폴리 필이 있습니다.
노드를 사용하는 경우 버전 10 이후 URLSearchParams를 전역 객체로 찾을 수 있습니다. 이전 버전에서는 require('url').URLSearchParams
대신 URL을 찾을 수 있습니다 . 실제 페치 API는 노드의 일부가 아니며 node-fetch 와 같은 패키지를 통해 추가해야합니다 .
답변
쿼리 문자열#stringify
에서 사용할 수 있습니다
import { stringify } from 'query-string';
fetch(`https://example.org?${stringify(params)}`)
답변
어쩌면 이것이 더 낫습니다.
const withQuery = require('with-query');
fetch(withQuery('https://api.github.com/search/repositories', {
q: 'query',
sort: 'stars',
order: 'asc',
}))
.then(res => res.json())
.then((json) => {
console.info(json);
})
.catch((err) => {
console.error(err);
});
답변
encodeQueryString — 객체를 querystring 매개 변수로 인코딩
/**
* Encode an object as url query string parameters
* - includes the leading "?" prefix
* - example input — {key: "value", alpha: "beta"}
* - example output — output "?key=value&alpha=beta"
* - returns empty string when given an empty object
*/
function encodeQueryString(params) {
const keys = Object.keys(params)
return keys.length
? "?" + keys
.map(key => encodeURIComponent(key)
+ "=" + encodeURIComponent(params[key]))
.join("&")
: ""
}
encodeQueryString({key: "value", alpha: "beta"})
//> "?key=value&alpha=beta"