Seeing dpm or drupal set message when using AJAX
Problem
One of the worst head-aches you'll encounter with AJAX is the inability to know if the code you're writing works.
Reason
This is because there's no place for the drupal_set_message() or dpm() messages to show on the screen.
Solution
This is easily fixed by the code below: I included a complete working copy so you get a better sense of what is going on.
/** * Implements hook_form_alter(). */ function hook_form_alter(&$form, &$form_state, $form_id) { // Check if ajax was fired. if (isset($form_state['triggering_element'])) { // We can do remote calls or execute Drupal // related functions. drupal_set_message(t('This will show within #message-container.')); } $form['add_new_agency'] = array( '#type' => 'textfield', '#title' => t('Add new agency'), '#default_value' => '', '#ajax' => array( 'callback' => 'add_new_agency_ajax_callback', 'wrapper' => 'test-wrapper', '#prefix' => '<div id="test-wrapper">', '#suffix' => '</div>', ), ); // Create an area where the ajax callback can write Drupal // messages to. $form['message_area'] = array( '#type' => 'container', '#prefix' => '<div id="message-container">', '#suffix' => '</div>', ); } /** * Ajax callback but more importantly, shows messages! */ function add_new_agency_ajax_callback($form, $form_state) { $commands[] = ajax_command_remove('#message-area'); $commands[] = ajax_command_after('#message-container', '<div id="message-area">' . theme('status_messages') . '</div>'); return array('#type' => 'ajax', '#commands' => $commands); }
Further Explanation
Notice line 27: $form['message_area'] array and line 37: add_new_agency_ajax_callback function. Now if you use DPM or a drupal_set_message and your ajax is triggered, you'll see the results in $form['message_area'].
Leave a comment