什么是序列化数组并通过get方法传递它的最佳方法

时间:2012-06-26 00:29:37

标签: php jquery ajax codeigniter history.js

我很想找到解决问题的好方法。

所以我正在使用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和普通请求。

我希望自己清楚明白......

2 个答案:

答案 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对象。

http://www.w3schools.com/jsref/jsref_encodeuri.asp