backbone.js单页应用程序中的URL太长(~98'000个字符)

时间:2013-03-22 10:41:26

标签: javascript backbone.js single-page-application backbone-routing

我有一个JavaScript单页面应用程序(使用backbone.js),其中应用程序的状态存储为URL参数的一部分。这个网页有很多复选框。

因此,如果用户点击了http://my-app.org/project/#app/load?checkboxID[4053]=1&checkboxID[4054]=1&checkboxID[4055]=1&checkboxID[4056]=1&checkboxID[4057]=1&checkboxID[4058]=1&checkboxID[4059]=1...goes on and on, various further params...

这样的网址

然后页面配置自己(使用Backbone.Router)并选择给定的复选框。请注意URL中的哈希 #app ,这意味着这些参数由JavaScript应用程序处理。

问题是,现在应用程序的参数比我之前想象的要多得多。因此,启用所有复选框后,我会得到一个大约98.000个字符的URL,而根据this answer,它最多只能是2.000。糟糕: - (

你有什么建议来处理这个问题?我想也许有一种聪明的方法可以“缩短”/“压缩”JavaScript中的URL字符串(比如gzipping + base64编码URL字符串),但即使这样也不会将URL缩短到2000字符以下。

2 个答案:

答案 0 :(得分:2)

我不认为通过URL传递App状态是一种很好的做法。 您可以使用正确的命名空间对象来存储状态。

var myApp = myApp || {};
myApp.state = myApp.state || {};

当您使用URL来携带状态时,只需填写此对象并使用它。

PS:这个答案可能不会让你高兴,因为你正在寻找类似压缩的东西,并且不想太多地改变你的代码。还是建议你。

答案 1 :(得分:1)

无法重新配置url以将参数读取为数组而不是单个项目,例如

checkboxId=[4053, 4054, 4054 ...]

这样可以保存一些字符,你可以循环遍历所述数组中的id。

如果“40”是一个普通字符,或者“4”是常见的,您甚至可以从值中删除它并在运行脚本时将其添加到前面?