URL-адрес кодирования javascript
У меня есть модель
public class SomeModel
{
public string SomeText { get; set; }
}
В javascript я делаю литерал объекта javascript модели:
var model = {
SomeText: "test"
};
var serializedData = JSON.stringify(model);
Это создает строку, которая выглядит следующим образом:
"{"SomeText":"test"}"
Теперь предположим, что я хочу отправить эту модель контроллеру, который принимает модель, подобную этой, со следующей функцией:
public void Index(SomeModel model)
{
}
Мне нужна строка url, в которой модель имеет следующий вид:
"?SomeText=test"
Я знаю, что ajax делает именно это, когда вы отправляете модель через пост ajax:
$.ajax({type:"POST",
url: "someUrl",
data: serializedData,
...
});
"data:" url-кодирует сериализованные данные.
Но я действительно не хочу использовать ajax, поэтому мне нужно сам создать этот url. Я хочу сделать то же самое, что и ajax с "data:". Как я могу самостоятельно кодировать сериализованные данные?
Ответы
Ответ 1
Вы должны использовать jQuery.param
:
$.param({foo:'bar', fizz:'buzz'});
//produces foo=bar&fizz=buzz
Массивы тоже в порядке:
$.param({foo:['bar', 'baz']});
//produces foo%5B%5D=bar&foo%5B%5D=baz
//which is the url encoded form of: foo[]=bar&foo[]=baz
если вам нужен традиционный синтаксис массива, используйте второй параметр:
$.param({foo:['bar','baz']}, true);
//produces foo=bar&foo=baz
Ответ 2
Чтобы избежать единственного значения, Javascript имеет функцию escape
. Вы должны предоставить свою собственную функцию для итерации по объекту, добавления ключей и т.д.
ИЗМЕНИТЬ
Esailija достаточно любезен, чтобы напомнить мне, что escape
неправильно обрабатывает многие распространенные случаи, а encodeURIComponent
намного лучше. Если вы уже используете jQuery (и вы должны быть), ответ zzzzBov лучше.