Доступ к параметрам запроса URL с использованием JavaScript в CakePHP - PullRequest
0 голосов
/ 26 июля 2011

Параметры запроса URL-адреса CakePHP не выполняются стандартным способом, например параметры: / param1: значение1 / параметр2: значение2 вместо? Param1 = значение1¶m2 = значение2

Это означает, что javascript location.searchне возвращает значение.

Существует плагин getQueryParams JQuery , который делает то, что я хочу, используя location.search

Мне пришлось изменить это, чтобы использовать

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

вместо

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

Однако теперь это включает в себя все, кроме хоста, в переменной pairs.Поэтому я должен проверить наличие символа «:», чтобы определить, является ли это параметром.

Это работает, но есть ли лучший (более похожий на Cake) способ сделать это? Я не понимаюНе хочу улучшать плагин JQuery (например, Regex ), я хочу найти лучший способ интеграции плагина с CakePHP.

Обновление: I 'я удалил оставшуюся часть кода JQuery, так как я доволен кодом jquery, моя проблема заключается в том, чтобы его было больше приспособлено с помощью cake

Есть ли какой-нибудь «похожий на торт» способ удаления пути к вашему приложению,модель и контроллер от location.pathname, так что вы получите то, что вы обычно получаете от location.search?

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Поскольку вы ищете определенный параметр, вы можете использовать регулярное выражение:

$.getQueryParam = function (param) {
    var re = new RegExp(param+':([^\/]+)');
    var matches = location.pathname.match(re);
    if (matches.length) {
        return matches[1];
    }
    return undefined;
}
0 голосов
/ 04 октября 2011

Так что, похоже, нет лучшего способа сделать это.Вот 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);
...