有一小部分js代码可以读取查询字符串。
然而,在我看到facebook login
的回复之后,这就像是
http://localhost:55643/WebSite2/HTMLPage2.htm#access_token=CAACSIC6Koe......roHXCK8ZD&expires_in=5439
我告诉自己,我必须编写一些代码来处理散列后的值(#
)。
所以我做了:
(function ($)
{
$.getQs = function (specificUrl)
{
var st = specificUrl || window.location.href;
var o = {}, e;
var re = /([^#?&=]+)=([^&#]*)/ig;
while (e = re.exec(st))
{
o[e[1]] = e[2];
}
//console.log(o);
return o;
}
})(jQuery);
这将在QS
和hash
(如果未定义specifiedUrl
- 它会查看浏览器网址)
用法1 :(对于特定网址):
console.log($.getQs('www.example.com?ferko=suska&ee=huu#a=1&b=2&c=3'));
这将返回
Object {ferko: "suska", ee: "huu", a: "1", b: "2", c: "3"}
用法2:(对于当前网址):
我当前的网址:
http://localhost:55643/WebSite2/HTMLPage.htm?ferko=suska&ee=huu#a=1&b=2&c=3
所以$.getQs()
也会产生
Object {ferko: "suska", ee: "huu", a: "1", b: "2", c: "3"}
问题出在哪里?
这里是:
http://localhost:55643/WebSite2/HTMLPage.htm?ferko=suska&ee=huu#a=1&b=2&c=3&ee=grrr
另请注意,QS已ee
,hash
方也有ee
。
我可以在我的对象中反映出来吗?
这就是我正在阅读facebook所需的价值
console.log($.getQs('http://localhost:55643/WebSite2/HTMLPage2.htm#access_token=CAACSIC6KoeroHXCK8ZD&expires_in=5439').access_token);
产量
CAACSIC6KoeroHXCK8ZD
答案 0 :(得分:1)
(function ($) {
$.getQs = function (specificUrl) {
function parseToObj(str, re) {
var o = {};
while(e = re.exec(str))
o[e[1]] = e[2];
return o;
}
var st = specificUrl || window.location.href;
return {
beforeHash: parseToObj(st, /([^#?&=]+)=([^&#]*)(?=.*?\#)/ig),
afterHash: parseToObj(st, /([^#?&=]+)=([^&#]*)(?!.*?\#)/ig)
};
}
})(jQuery);
或更好的解决方案:
(function ($) {
$.getQs = function (specificUrl) {
function parseToObj(str, re) {
var o = {};
while(e = re.exec(str))
o[e[1]] = e[2];
return o;
}
var st = specificUrl || window.location.href;
var hashPos = st.indexOf('#');
if(hashPos == -1) hashPos = st.length;
return {
beforeHash: parseToObj(st.substring(0, hashPos), /([^#?&=]+)=([^&#]*)/ig),
afterHash: parseToObj(st.substring(hashPos), /([^#?&=]+)=([^&#]*)/ig)
};
}
})(jQuery);