web-dev-qa-db-ja.com

Ajaxリクエストを中止してフォーム要素のAjaxコールバックでリダイレクトする方法

Ajaxコールバック関数でページをリダイレクトしたいのですが、ajaxコールバック関数でリダイレクトに何も機能しません( "header"、 "drupal_goto"など)。

5
user21139

それには2つの方法があり、最も適切なもの(javascriptを介してDrupal.behaviorsオブジェクトを追加する)は以下の通りです

(function ($) {
  Drupal.behaviors.custom_redirect = {
    attach: function() {
      // Replace he form id and the select id in selecotor below.
      $("form#form_id select#select_id").change(function(e) {
        e.stopPropagation();
        // Path where you want to redirect.
        var redirect_url = 'YOUR_REDIRECT_URL';
        window.location.pathname = redirect_url;
      });
    }
  };
}(jQuery));

ただし、特に上記を実行したい場合は、PHPコード/カスタムモジュールよりも、次のスニペットを追加してみてください( ctools ajaxリダイレクトコマンドを使用 )をajaxに追加してください)。コールバック関数:

$redirect_url = 'YOUR_REDIRECT_URL';
ctools_include('ajax');
ctools_add_js('ajax-responder');
$commands[] = ctools_ajax_command_redirect($redirect_url);
print ajax_render($commands);
exit;
7
Ankit Agrawal

ctools がインストールされている場合(ほぼすべてのDrupalサイトが行う))、 ctools_ajax_command_redirect() を使用できます。あなたのAJAXコールバックで、例えば.

ctools_include('ajax');
$commands[] = ctools_ajax_command_redirect('path/to/redirect');
return array('#type' => 'ajax', '#commands' => $commands);
7
Clive