如何在URL查询字符串中存储程序状态?
如何在URL查询字符串中存储程序状态?
我如何读取和写入查询字符串?
var pageNumber = QueryString['pageNumber']; var pageSize = QueryString['pageSize']; $('#next').click(function() { QueryString['pageNumber'] = ++pageNumber; refresh(); }); function refresh() { /** 在这里获取数据并更新页面 **/ }
当然,这将允许用户复制和粘贴包含部分程序状态的URL。
是否有类似于上面使用的QueryString
的API?
在浏览器中使用JavaScript可以通过Browse Object Model的window.location.search属性访问查询字符串。然而,对于解析查询字符串并没有很多原生支持。(参见也可以查看How can I get a specific parameter from location.search?)也许像下面这样可以做到吗?
var GET = {}; var queryString = window.location.search.replace(/^\?/, ''); queryString.split(/\&/).forEach(function(keyValuePair) { var paramName = keyValuePair.replace(/=.*$/, ""); var paramValue = keyValuePair.replace(/^[^=]*\=/, ""); GET[paramName] = paramValue; }); var pageNumber = GET['pageNumber']?Number(GET['pageNumber']):0; $('#next').click(function() { GET['pageNumber'] = ++pageNumber; refresh(); }); function refresh() { var newQueryString = Object.keys(GET).reduce(function(keyValuePairs, paramName) { keyValuePairs.push(escape(paramName)+"="+escape(GET[paramName])); return keyValuePairs; }, []).join('&'); window.location.search = "?"+newQueryString; }
调用window.location.search会不会触发页面加载?
- 这取决于你对“调用”一词的理解。读取值不会触发页面加载;写入值会触发页面加载。如果你不希望触发页面加载,可以更改window.location.hash的值(对应于Fragment Identifier)。