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
获得的内容?
答案 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¶m2=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);