Any word after the question mark (?) in a URL is considered to be a parameter which can hold values. The value for the corresponding parameter is given after the symbol "equals" (=). Multiple parameters can be passed through the URL by separating them with multiple "&".
In case a jQuery object is passed, it should contain input elements with name/value properties. So in your case: var url = '../reports/student.
One line with no dependencies:
new URLSearchParams(obj).toString();
// OUT: param1=something¶m2=somethingelse¶m3=another¶m4=yetanother
Use it with the URL builtin like so:
let obj = { param1: 'something', param2: 'somethingelse', param3: 'another' }
obj['param4'] = 'yetanother';
const url = new URL(`your_url.com`);
url.search = new URLSearchParams(obj);
const response = await fetch(url);
[Edit April 4, 2020]: null
values will be interpreted as the string 'null'
.
If you use jQuery, this is what it uses for parameterizing the options of a GET XHR request:
$.param( obj )
http://api.jquery.com/jQuery.param/
An elegant one: (assuming you are running a modern browser or node)
var str = Object.keys(obj).map(function(key) {
return key + '=' + obj[key];
}).join('&');
And the ES2017 equivalent: (thanks to Lukas)
let str = Object.entries(obj).map(([key, val]) => `${key}=${val}`).join('&');
Note: You probably want to use encodeURIComponent()
if the keys/values are not URL encoded.
var str = "";
for (var key in obj) {
if (str != "") {
str += "&";
}
str += key + "=" + encodeURIComponent(obj[key]);
}
Example: http://jsfiddle.net/WFPen/
ES2017 approach
Object.entries(obj).map(([key, val]) => `${key}=${encodeURIComponent(val)}`).join('&')
ES6:
function params(data) {
return Object.keys(data).map(key => `${key}=${encodeURIComponent(data[key])}`).join('&');
}
console.log(params({foo: 'bar'}));
console.log(params({foo: 'bar', baz: 'qux$'}));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With