0

有很多 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);

这将返回一个包含所有值对象,并且QShash

(如果specifiedUrl未定义 - 它将查看浏览器 url)

用法 1:(针对特定URL):

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:(对于当前URL):

我当前的网址:

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有eehash侧有ee

我怎样才能在我的对象中反映这一点?

编辑

这就是我阅读facebook期望值的方式

console.log($.getQs('http://localhost:55643/WebSite2/HTMLPage2.htm#access_token=CAACSIC6KoeroHXCK8ZD&expires_in=5439').access_token);

产量

CAACSIC6KoeroHXCK8ZD

4

1 回答 1

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);
于 2013-05-28T14:00:12.120 回答