2011-07-26 8 views
0

CakePHP URLクエリパラメータは、標準的な方法で行われません。 param1 = value1の代わりに/ param1:value1/param2:value2 & param2 = value2CakePHPでjavascriptを使用してURLクエリパラメータにアクセスする

これは、javascriptのlocation.searchが値を返さないことを意味します。

私はlocation.search

を使って何をしたい私は、しかし、これは今ではすべてが含まれて代わりに

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

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

を使用するために、これを修正しなければならなかったんgetQueryParams JQuery pluginがあります変数pairsのホストを除きます。だから私はそれがパラメータであるかどうかを調べるために ':'をチェックする必要があります。

これはうまくいきますが、もっと良い(ケーキのような)方法がありますか? JQueryプラグイン(例えばRegex)を改善したくないので、プラグインとCakePHPを統合するためのより良い方法を探したいと思います。

Upddate:私はjqueryのコードで幸せだと私はjQueryのコードの残りの部分を削除した、私の問題は、ケーキ

でより多くのそれを当てはめるとあるのいくつかの「ケーキのような」方法はありますあなたのアプリ、モデル、コントローラへのパスをlocation.pathnameから削除して、普通はlocation.searchから得ることになるでしょうか?

答えて

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); 
1

あなたが特定のパラメータを探しているので、あなたは正規表現を使用することができます

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

ありがとう@chrisdpratt、混乱のために申し訳ありませんが、私はケーキによく統合する方法を探しています。私はこの目的のために質問を編集しました。 – icc97