4

Ajax を使用する Drupal Web アプリがあります。Ajax 関数は、Drupal 関数にパラメーターとして文字列を渡す必要がある場合があります。

$.ajax({url: "index.php?q=get_value/"+encodeURIComponent(value),  

値にスラッシュが含まれていると、Drupal の関数として認識されません。

 function get_value($value) {
       print urldecode($value);

たとえば、渡された文字列が ABC/123 の場合、 get_value は ABC のみを出力します

スラッシュを渡し、PHP/Drupal から文字列全体を取得するこの問題を解決するにはどうすればよいですか?

4

7 に答える 7

6

%2f次の代わりに使用/します。

$.ajax({url: "index.php?q=get_value" + "%2f" + encodeURIComponent(value),  

[参照]、セクション 2.2 を参照

または、より読みやすい代替手段:

$.ajax({url: "index.php?q=" + encodeURIComponent("get_value/"+value),
于 2012-05-22T09:58:25.303 に答える
2

問題は、Drupalがスラッシュをパス区切り文字として解釈するため、get_value / val1 / val2 /val3の最初のパラメーターを$valueとして抽出することです...Drupalに引数を分割させることはできますが、それらを再結合する必要があります。以下はDrupal7の例です。

メニューシステムでは、drupalがすべてのパラメーターを使用してget_value関数をコールバックすることを確認する必要があります。

function mymodule_menu {
   $items['get_value'] = array(
      'page callback' => 'mymodule_get_value',
   );
   return $items;
}

次に、動的な引数の数を再結合します。

function mymodule_get_value() {
   $args = func_get_args();
   $value = implode('/', $args);
   // do what you need with $value here
}

お役に立てれば !

于 2012-05-28T21:45:23.817 に答える
1

PHP関数がどこにあるかについてもう少し詳しく教えてください-それはDrupalカスタムモジュールにありますか?カスタムモジュールの場合、get_valueパスにmenu_hookを使用していますか?また、どのバージョンのDrupalを使用していますか?もう1つは、encodeURIComponentをDrupal.encodeURIComponent(Drupal 6)またはDrupal.encodePath(Drupal 7)に置き換えることができるということです。

于 2012-05-24T09:58:19.497 に答える
1

ここで何かが足りないのかもしれませんが、クエリ文字列を連結してajax関数に渡すことはできませんか? parse_url()を使用できるかもしれません。

あなたget_value()の問題かもしれません。PHPのurdecode()マニュアルから:

于 2012-05-22T09:24:51.653 に答える
1

それが正確なコードである場合、構文エラー (余分な引用符) があります。最初の行は次のようになります。

$.ajax({url: "index.php?q=get_value/" + encodeURIComponent(value),  
于 2012-05-22T09:25:04.180 に答える
1

まず、ルーティング システムが何を行っているかを知っておくと役に立ちます。デバッグ時に何が表示されますか?

 function get_value($value) {
   var_dump($value);
   print urldecode($value);

試すことができる別のオプションは、変数を二重引用符で囲んで渡すことで、文字列として解釈されます。

$.ajax({url: "index.php?q=get_value/\"" + encodeURIComponent(value) + "\"", 
于 2012-05-27T04:29:16.300 に答える
1

URL デコードする前に、PHP 関数の $value パラメータにスラッシュの後の部分があるかどうかを確認する必要があります。

この問題を回避する 1 つの方法は、エンコードする前に文字列内のスラッシュを置き換え、PHP でデコードした後に元に戻すことです。スラッシュを改行文字に置き換える例を次に示します (文字列に含まれていない文字を使用する必要があります)。

$.ajax({url: "index.php?q=get_value/"+encodeURIComponent(value.replace("/", "\r")),

そして、これを逆にするPHPコード:

function get_value($value) {
    print str_replace("\r", "/", urldecode($value));

他のいくつかの文字を試して (単一の文字の代わりに文字シーケンスを使用することもできます)、何が機能するかを確認する必要がある場合があります。URL エンコードされたスラッシュを削除するロジックは、他の文字も削除する可能性があります。

于 2012-05-29T08:22:00.230 に答える