【问题标题】:How can I fill data to extjs component using querystring?如何使用查询字符串将数据填充到 extjs 组件?
【发布时间】:2011-01-12 14:02:00
【问题描述】:

例如,如果我有 extjs ComboBox,并且我有类似 http://localhost:8080?param=value1,value2,value3 的 URL

如何在 ExtJS 中访问 << param >> value,以便将其转换为 Ext.data.Array 或 ....

【问题讨论】:

    标签: javascript url extjs query-string


    【解决方案1】:

    我使用了一个不久前找到的 JavaScript 文件:

    /* Client-side access to querystring name=value pairs
        Version 1.2.3
        22 Jun 2005
        Adam Vandenberg
    */
    
    function QueryString(qs) { // optionally pass a querystring to parse
        this.params = new Object()
        this.get = QueryString_get
    
        if (qs == null)
            qs=location.search.substring(1,location.search.length)
    
        if (qs.length == 0) return
    
    // Turn <plus> back to <space>
    // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
        qs = qs.replace(/\+/g, ' ')
        var args = qs.split('&') // parse out name/value pairs separated via &
    
    // split out each name=value pair
        for (var i = 0, len = args.length; i < len; i++) {
            var value;
            var pair = args[i].split('=')
            var name = unescape(pair[0])
    
            if (pair.length == 2)
                value = unescape(pair[1])
            else
                value = name
    
            this.params[name] = value
        }
    }
    
    function QueryString_get(key, default_) {
        // This silly looking line changes UNDEFINED to NULL
        if (default_ == null) default_ = null;
    
        var value=this.params[key]
        if (value==null) value=default_;
    
        return value
    }
    

    然后你要做的是:

    var param = new QueryString().get("param");
    var values = param.split(",");
    

    values 将成为您的数组。

    【讨论】:

      【解决方案2】:

      使用框架解码查询字符串:

      var params = Ext.urlDecode(location.search.substring(1));
      var array = [];
      for (var name in params) {
          array.push([name, params[name]]);
      }
      

      现在array 适合用作data 到具有namevalue 字段的ArrayStore

      【讨论】:

        【解决方案3】:

        我有这个(基于上面找到的代码@Lloyd):

        var the_query_string = new Object();
        (function() {
         var qs = location.search.substr(1).replace(/\+/g, ' ').split('&');
         for (var i = 0; i < qs.length; i++) {
          qs[i] = qs[i].split('=');
          if (qs[i][0])
           the_query_string[qs[i][0]] = decodeURIComponent(qs[i][1]);
         }
        })();
        

        所以我可以全局访问任何查询字符串变量。例如当
        location.search = '?search=hello+world&amp;foo=bar%3Dbar'
        那么
        the_query_string.search = 'hello world'
        the_query_string.foo = 'bar=bar'

        【讨论】:

        • 你的解决方案有点类似于劳埃德提供的解决方案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        • 2021-11-18
        • 2017-02-02
        相关资源
        最近更新 更多