Чи є спосіб створити параметри запиту для виконання GET-запиту в JavaScript?
Так само, як і в Python urllib.urlencode()
, який у вас є в словнику (або списку з двох кортежів) і створює подібний рядок 'var1=value1&var2=value2'
.
Чи є спосіб створити параметри запиту для виконання GET-запиту в JavaScript?
Так само, як і в Python urllib.urlencode()
, який у вас є в словнику (або списку з двох кортежів) і створює подібний рядок 'var1=value1&var2=value2'
.
Відповіді:
Ось вам:
function encodeQueryData(data) {
const ret = [];
for (let d in data)
ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));
return ret.join('&');
}
Використання:
const data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
const querystring = encodeQueryData(data);
URLSearchParams збільшує підтримку браузера.
const data = {
var1: 'value1',
var2: 'value2'
};
const searchParams = new URLSearchParams(data);
// searchParams.toString() === 'var1=value1&var2=value2'
Node.js пропонує модуль запиту рядків .
const querystring = require('querystring');
const data = {
var1: 'value1',
var2: 'value2'
};
const searchParams = querystring.stringify(data);
// searchParams === 'var1=value1&var2=value2'
searchParams.append(otherData)
функціональний
function encodeData(data) {
return Object.keys(data).map(function(key) {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
var data = { bloop1: true, bloop2: "something" }; var url = "https://something.com/?"; var params = encodeData(data); var finalUrl = url + params; // Is this the right use?
Слід виробляти https://www.something.com/?bloop1=true&bloop2=something
?
Забба надав у коментарі до прийнятої відповіді пропозицію, що для мене найкраще рішення: використовуйте jQuery.param () .
Якщо я використовую jQuery.param()
дані в оригінальному запитанні, то код просто:
const params = jQuery.param({
var1: 'value',
var2: 'value'
});
Змінна params
буде
"var1=value&var2=value"
Більш складні приклади, входи та виходи див. У документації на jQuery.param () .
Ми щойно випустили arg.js , проект, спрямований на вирішення цієї проблеми раз і назавжди. Традиційно це було так складно, але зараз ти можеш зробити:
var querystring = Arg.url({name: "Mat", state: "CO"});
І читання творів:
var name = Arg("name");
або отримання всієї партії:
var params = Arg.all();
і якщо ви дбаєте про різницю між ?query=true
і #hash=true
після цього ви можете використовувати Arg.query()
і Arg.hash()
методи.
Це має зробити цю роботу:
const createQueryParams = params =>
Object.keys(params)
.map(k => `${k}=${encodeURI(params[k])}`)
.join('&');
Приклад:
const params = { name : 'John', postcode: 'W1 2DL'}
const queryParams = createQueryParams(params)
Результат:
name=John&postcode=W1%202DL
encodeURIComponent()
замість encodeURI
. Прочитайте про різницю .
Використання Object.entries()
, яке повертає масив [key, value]
пар об'єкта . Наприклад, бо {a: 1, b: 2}
воно повернеться [['a', 1], ['b', 2]]
. Він не підтримується (і не буде) тільки IE.
const buildURLQuery = obj =>
Object.entries(obj)
.map(pair => pair.map(encodeURIComponent).join('='))
.join('&');
buildURLQuery({name: 'John', gender: 'male'});
"name=John&gender=male"
Якщо ви використовуєте прототип , є Form.serialize
Якщо ви використовуєте jQuery , є Ajax / serialize
Я не знаю жодних незалежних функцій для цього, але пошук в Google за ним знайшов кілька перспективних варіантів, якщо ви зараз не використовуєте бібліотеку. Якщо ви цього не зробите, ви справді повинні, тому що це небо.
Так само, як переглянути це майже 10-річне запитання. У цю епоху позапрограмного програмування найкраще налаштувати проект за допомогою менеджера залежностей ( npm
). Існує ціла котеджна галузь бібліотек, які кодують рядки запитів і піклуються про всі кращі справи. Це одна з найпопулярніших -
Невелика модифікація машинопису:
public encodeData(data: any): string {
return Object.keys(data).map((key) => {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
Цей потік вказує на деякий код для втечі URL-адрес у php. Там escape()
і unescape()
буде виконано більшу частину роботи, але вам потрібно додати ще пару додаткових речей.
function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}
function urldecode(str) {
str = str.replace('+', ' ');
str = unescape(str);
return str;
}
for
використовуйте hasOwnProperty для забезпечення сумісності.