Есть ли способ создать параметры запроса для выполнения запроса GET в JavaScript?
Как и в Python, вы urllib.urlencode()
, который принимает словарь (или список из двух кортежей) и создает строку типа 'var1=value1&var2=value2'
.
Есть ли способ создать параметры запроса для выполнения запроса GET в JavaScript?
Как и в Python, вы urllib.urlencode()
, который принимает словарь (или список из двух кортежей) и создает строку типа 'var1=value1&var2=value2'
.
Здесь вы идете:
function encodeQueryData(data) {
let ret = [];
for (let d in data)
ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));
return ret.join('&');
}
Использование:
var data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
var querystring = encodeQueryData(data);
функционал
function encodeData(data) {
return Object.keys(data).map(function(key) {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
Zabba предоставил в комментарии о принятом в настоящее время ответе предложение о том, что для меня это лучшее решение: используйте jQuery.param().
Если я использую jQuery.param()
для данных в исходном вопросе, то код просто:
var params = jQuery.param({
var1: 'value',
var2: 'value'
});
Переменная params
будет
"var1=value&var2=value"
Более сложные примеры, входы и выходы, см. в документации jQuery.param().
Если вы используете Prototype, Form.serialize
Если вы используете jQuery, Ajax/serialize
Я не знаю каких-либо независимых функций для выполнения этого, однако, но поиск в Google показал, что у вас появилось много перспективных вариантов, если вы в настоящее время не используете библиотеку. Если вы этого не сделаете, вам действительно нужно, потому что они рай.
Мы только что выпустили 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()
.
Небольшая модификация typescript:
public encodeData(data: any): string {
return Object.keys(data).map((key) => {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
Так же, как пересмотреть этот почти 10-летний вопрос. В эту эпоху готового программирования лучше всего настроить ваш проект с помощью менеджера зависимостей (npm
). Существует целая кустарная индустрия библиотек, которые кодируют строки запросов и заботятся обо всех крайних случаях. Это один из самых популярных -
Этот thread указывает на некоторый код для экранирования 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;
}