Url编码javascript对象文字

时间:2012-06-15 15:47:07

标签: javascript jquery ajax asp.net-mvc-3 url

我有模特

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 post发送模型时,ajax就是这样做的:

$.ajax({type:"POST", 
        url: "someUrl", 
        data: serializedData,
        ...
});

'data:'对序列化数据进行url编码。

但我实际上不想使用ajax,所以我需要自己构建这个url。我想做与ajax对'data:'完全相同的事情。我如何自己对序列化数据进行url编码?

2 个答案:

答案 0 :(得分:34)

您应该使用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

答案 1 :(得分:-2)

要转义单个值,Javascript具有函数escape。您必须提供自己的函数来遍历对象,添加键等等。

修改

Esailija非常友好地提醒我escape没有正确处理许多常见案例,encodeURIComponent要好得多。如果你已经在使用jQuery(你应该这样做),那么zzzzBov的答案会更好。