Jquery 如何在Drupal7中使自定义Ajax命令等待动画
我试图构建一个定制的Ajax命令,用于Drupal7视图。该视图将在栅格中显示多个缩略图。单击一个缩略图,应在下一行中的一个div上滑下完整的节点内容。在处理新请求之前,单击另一个缩略图会向上滑动另一个节点。因为我找不到一种方法来操作标准的ajax命令,以防止在动画完成之前用ajax替换div,所以我尝试构建一个自定义ajax命令来控制流。现在,无论我做什么,每次单击缩略图都会出现匿名Ajax错误 发生AJAX HTTP错误。HTTP结果代码:500调试 信息如下。路径: [xxxxxxx].localhost/ajax reader/ajax/169/modal StatusText: 内部服务器错误响应文本: 这是我的模块代码,带有:Jquery 如何在Drupal7中使自定义Ajax命令等待动画,jquery,ajax,drupal,drupal-7,Jquery,Ajax,Drupal,Drupal 7,我试图构建一个定制的Ajax命令,用于Drupal7视图。该视图将在栅格中显示多个缩略图。单击一个缩略图,应在下一行中的一个div上滑下完整的节点内容。在处理新请求之前,单击另一个缩略图会向上滑动另一个节点。因为我找不到一种方法来操作标准的ajax命令,以防止在动画完成之前用ajax替换div,所以我尝试构建一个自定义ajax命令来控制流。现在,无论我做什么,每次单击缩略图都会出现匿名Ajax错误 发生AJAX HTTP错误。HTTP结果代码:500调试 信息如下。路径: [xxxxxxx].l
<?php
function ajax_reader_init() {
drupal_add_js('misc/jquery.form.js');
drupal_add_library('system', 'drupal.ajax');
}
/**
* Implements hook_menu().
*/
function ajax_reader_menu() {
// Menu callback for using ajax outside of the Form API
$items['ajax-reader'] = array(
'page callback' => 'ajax_link_response',
'access callback' => 'user_access',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Register a custom jquery ajax command.
*/
function ajax_reader_command_replace_work($item) {
return array(
'command' => 'replaceWork',
'cont' => $item
);
}
/**
* Callback function.
*/
function ajax_link_response($type = 'ajax', $nid = 0) {
$output = _ajax_reader_load_noder($nid);
if ($type == 'ajax') {
$commands = array();
// Feeding the themed node to my custom ajax command
$commands[] = ajax_command_replace_work($output);
$page = array(
'#type' => 'ajax',
'#commands' => $commands
);
ajax_deliver($page);
}
elseif ($nid > 0) {
drupal_goto('node/' . $nid);
}
else {
$output = '<div id="content">' . $output . '</div>';
return $output;
}
}
/**
* Helper function for returning a themed node
*/
function _ajax_reader_load_noder($nid = 0) {
$node = node_load($nid, NULL, false);
if ($node) {
$vnode = node_view($node, $view_mode = 'modal');
return theme("node", $vnode);
}
}
我问题中的代码有效,事实上是我没有的问题的解决方案
作为参考,对于任何对这类问题感兴趣的人,我想回答我自己的问题,尽管这会让我成为一个非常愚蠢的程序员:)上面的代码工作完美,但在PHP方面有一个命名问题:引用自定义ajax命令的函数名是ajax\u reader\u command\u replace\u work()而不是ajax\u命令\u replace\u work()
就这样。希望有人会觉得这个有用
(function($, Drupal) {
/**
* Register a custom jquery ajax command.
*/
Drupal.ajax.prototype.commands.replaceWork = function(ajax, response, status) {
// Checking if there is a div present to hide
if ( $('#detail-view').length) {
// Using promise() to make sure the slide animation is finished before replacing my content.
$('#detail-view').slideUp('slow').promise().done(function() {
$('#detail-view').replaceWith('<div id="detail-view">' + response.cont + '</div>');
$('#detail-view').slideDown('fast');
});
// No #detail-view present to hide.
} else {
$(".view-portfolio .add-row").parents('tr').next().find('th').append('<div id="detail-view"></div>');
$('#detail-view').replaceWith('<div id="detail-view">' + response.cont + '</div>');
$('#detail-view').slideDown('fast');
}
}
})(jQuery, Drupal);