Подтвердить что ты не робот

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:". Как я могу самостоятельно кодировать сериализованные данные?

4b9b3361

Ответ 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 лучше.