2

所以我使用 ajax 请求来传递一些数据以进行过滤。

然后我使用history.js,这样我就可以更改url并向浏览器添加状态,从而可以返回、前进等。这样,我可以使用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);
        }
    }); 
    
}

这将向此 URL 发出请求:

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://localhost/Project/Controller/?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 网址?filter_array=["1","50","70"]

所以我只需要一个解决方案,让我只有一种类型的 GET url,所以我可以使用相同的 url 到 ajax 和正常请求。

4

2 回答 2

0

传递值数组的标准方法是使用[]'s 重复传递名称(url 编码),如您的第一个示例所示。

您需要以符合此要求的方式生成您的 URL...

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

于 2012-06-26T00:34:29.043 回答
0

jQuery 对 JSON 对象进行 URL 编码,因此没有非法字符。如果您想使用 javascript 检索该 GET 变量,则必须从 URL 中提取数据,对其进行 URL 解码,然后使用 JSON.parse() 将其转换回 JavaScript 对象。

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

于 2012-06-26T00:34:39.850 回答