我现在有一个自定义模块,以便使用 Drupal 消息发送 AJAX 功能。该模块具有以下代码(test_error.module):
<?php
function test_error_user_view_alter(&$build) {
//_assassinations_player_profile($build);
}
function test_error_form_alter(&$form, &$form_state, $form_id) {
$form['test_error'] = array(
'#type' => 'button',
'#name' => 'Error',
'#value' => t('Error'),
'#ajax' => array(
'callback' => 'test_error_error',
'wrapper' => 'the-wrapper-div-field',
),
);
$form['test_warning'] = array(
'#type' => 'button',
'#name' => 'Error',
'#value' => t('Error'),
'#ajax' => array(
'callback' => 'test_error_warning',
'wrapper' => 'the-wrapper-div-field',
),
);
return $form;
}
function test_error_error() {
drupal_set_message("Header error", 'error');
}
function test_error_warning() {
drupal_set_message("Header warning", 'warning');
}
然后,在 page.tpl.php 中,我有以下输出 $messages:
<div id="messages-wrap"><?php print $messages; ?></div>
AJAX 功能在单击按钮时发生 - 设置消息 - 而消息仅在页面重新加载后显示。我试图通过返回 AJAX 调用来破解我的方式,如下所示:
jQuery(document).ready( function(){
jQuery('.ajax-processed').each( function(){
jQuery(this).unbind();
});
jQuery('#edit-test-warning, #edit-test-error').click( function() {
var the_form = jQuery(this).closest('form');
var form_action = the_form.attr('action');
var details = the_form.serialize();
jQuery.ajax({
type: "POST",
url: form_action,
data: details
}).done( function(){
jQuery('#messages-wrap').load("/ #messages-wrap");
});
});
});
#edit-test-x 按钮上的单击事件绑定永远不会发生,因为 Drupal 的本机 ajax.js 通过添加其 ajax-x 类来阻止它。
当目标是如此简单的事情时,这个问题是如此持久且如此难以解决,这让我发疯了。我错过了什么?谷歌搜索和 StackOverflow 浏览出人意料地毫无结果。
谢谢!