使用CakePHP中的javascript访问URL查询参数

时间:2011-07-26 14:29:35

标签: url cakephp cakephp-1.2

CakePHP URL查询参数不是以标准方式完成的,例如params是/ param1:value1 / param2:value2而不是?param1 = value1& param2 = value2

这意味着javascript location.search不会返回值。

使用location.search

可以实现我想要的getQueryParams JQuery plugin

我必须修改它才能使用

var pairs = location.pathname.split('/');

而不是

var pairs = location.search.substring(1).split('&');

但是现在这包括变量pairs中除主机之外的所有内容。所以我必须检查':'以查看它是否是参数。

这有效 - 但有更好的(更像Cake)方式吗?我不想改进JQuery插件(例如Regex),我想要找到一种更好的方法将插件与CakePHP集成。

更新:我已经删除了其余的JQuery代码,因为我对jquery代码很满意,我的问题是更适合使用cake

是否有某种“类似蛋糕”的方法可以从location.pathname中移除您的应用,模型和控制器的路径,以便最终得到您通常从location.search获得的内容?

2 个答案:

答案 0 :(得分:1)

由于您正在搜索特定参数,因此可以使用正则表达式:

$.getQueryParam = function (param) {
    var re = new RegExp(param+':([^\/]+)');
    var matches = location.pathname.match(re);
    if (matches.length) {
        return matches[1];
    }
    return undefined;
}

答案 1 :(得分:0)

所以似乎没有更好的方法。这是javascript供参考:

// jQuery getQueryParam Plugin 1.0.1 (20100429)
// By John Terenzio | http://plugins.jquery.com/project/getqueryparam | MIT License
// Modified by ICC to work with cakephp
(function ($) {
    // jQuery method, this will work like PHP's $_GET[]
    $.getQueryParam = function (param) {
        // get the pairs of params fist
        // we can't use the javascript 'location.search' because the cakephp URL doesn't use standard URL params
        // e.g. the params are /param1:value1/param2:value2 instead of ?param1=value1&param2=value2
        var pairs = location.pathname.split('/');
        // now iterate each pair
        for (var i = 0; i < pairs.length; i++) {
            // cakephp query params all contain ':'
            if (pairs[i].indexOf(':') > 0) {
                var params = pairs[i].split(':');
                if (params[0] == param) {
                    // if the param doesn't have a value, like ?photos&videos, then return an empty srting
                    return params[1] || '';
                }
            }
        }
        //otherwise return undefined to signify that the param does not exist
        return undefined;
    };
})(jQuery);