JavaScript对象字面量的Url编码

13

我有一个模型

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编码呢?


请查看 http://api.jquery.com/jQuery.param/ - Juan Enrique Muñoz Zolotoochin
2个回答

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

正是我所需要的,谢谢你,但我需要进一步检查,因为该模型实际上包含一个列表... - JayAr

-2

为了转义单个值,Javascript 有一个名为 escape 的函数。您必须提供自己的函数来迭代对象、添加键等。

编辑

Esailija 友好地提醒我,escape 不能正确处理许多常见情况,而 encodeURIComponent 更好。如果您已经在使用 jQuery(您应该这样做),zzzzBov 的答案更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接