Как создать параметры запроса в Javascript?

Есть ли способ создать параметры запроса для выполнения запроса GET в JavaScript?

Как и в Python, вы urllib.urlencode(), который принимает словарь (или список из двух кортежей) и создает строку типа 'var1=value1&var2=value2'.

Ответ 1

Здесь вы идете:

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);

Ответ 2

функционал

function encodeData(data) {
    return Object.keys(data).map(function(key) {
        return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
}   

Ответ 3

Zabba предоставил в комментарии о принятом в настоящее время ответе предложение о том, что для меня это лучшее решение: используйте jQuery.param().

Если я использую jQuery.param() для данных в исходном вопросе, то код просто:

var params = jQuery.param({
    var1: 'value',
    var2: 'value'
});

Переменная params будет

"var1=value&var2=value"

Более сложные примеры, входы и выходы, см. в документации jQuery.param().

Ответ 4

Если вы используете Prototype, Form.serialize

Если вы используете jQuery, Ajax/serialize

Я не знаю каких-либо независимых функций для выполнения этого, однако, но поиск в Google показал, что у вас появилось много перспективных вариантов, если вы в настоящее время не используете библиотеку. Если вы этого не сделаете, вам действительно нужно, потому что они рай.

Ответ 5

Мы только что выпустили 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().

Ответ 6

Небольшая модификация typescript:

  public encodeData(data: any): string {
    return Object.keys(data).map((key) => {
      return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
  }

Ответ 7

Так же, как пересмотреть этот почти 10-летний вопрос. В эту эпоху готового программирования лучше всего настроить ваш проект с помощью менеджера зависимостей (npm). Существует целая кустарная индустрия библиотек, которые кодируют строки запросов и заботятся обо всех крайних случаях. Это один из самых популярных -

https://www.npmjs.com/package/query-string

Ответ 8

Этот 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;
}