我很想找到解决问题的好方法。
所以我正在使用ajax请求传递一些数据用于过滤目的。
然后我使用history.js,这样我就可以更改网址并向浏览器添加状态,从而可以返回,继续前进等。这样,我可以使用ajax请求或正常请求过滤我的数据。到目前为止一切都很好。
我的问题是,在我通过ajax请求的数据中有一个数组:
function updateContent(url, state) {
$.ajax({
type: 'GET',
data: {name: state.filter_name, num: state.filter_number,
data: state.filter_data, array: state.filter_array},
url: url,
success: function(msg) {
$('#ajax').html(msg);
}
});
}
这将向此网址发出请求 http:// localhost / Project / Controller /?filter_array%5B%5D = 1& filter_array%5B%5D = 50& filter_array%5B%5D = 70。
问题是我想将此网址传递给history.pushstate
如果我使用jsenconde然后手动构建url,则url将更加轻微不同,将类似于: HTTP://本地主机/项目/控制器/ filter_array = [ “1”, “50”, “70”]
虽然它更干净,但我在某处读到你不应该在url中使用[]但是即使我使用这种方式我会得到两种类型的GET url,ajax URL?filter_array%5B%5D = 1& filter_array %5B%5D = 50&安培; filter_array%5B%5D = 70。和json url?filter_array = [“1”,“50”,“70”]。
所以我只需要一个解决方案让我只有一种类型的GET url,所以我可以使用相同的URL来访问ajax和普通请求。
我希望自己清楚明白......
答案 0 :(得分:0)
传递值数组的标准方法是使用[]
重复传递名称(url-encoded),如第一个示例所示。
您需要以符合此标准的方式生成您的网址...
filter_array[]=1&filter_array[]=2&filter_array[]=3
当然,正如你所展示的那样编码......
filter_array%5B%5D=1&filter_array%5B%5D=2&filter_array%5B%5D=3
如果您坚持使用这种格式,您的代码将更具可移植性(例如,ASP.Net将像许多PHP库一样自动执行向List的转换。)
你有什么理由不能以这种格式生成网址吗?
这里的区别在于,一个是使用标准表格编码,另一个是转换JSON
答案 1 :(得分:0)
jQuery是对JSON对象进行编码的URL,因此没有非法字符。如果你想使用javascript检索那个GET变量,你将不得不从URL中提取数据,对URL进行解码,然后使用JSON.parse()将其转换回JavaScript对象。