好的,所以我找到了答案。
现在从常规的ajax回调中加载视图,而不是从我自己的回调中加载视图。
在我的页面上,创建视图对象,并将配置添加到Drupal.settings。
$view = views_get_view('taxonomy_term');$view->set_display('page');$view->set_use_ajax(TRUE);$view->set_arguments(array($tid));$settings = array( 'views' => array( 'ajax_path' => url('views/ajax'), 'ajaxViews' => array( array( 'view_name' => $view->name, 'view_display_id' => $view->current_display, 'view_args' => check_plain(implode('/', $view->args)), 'view_path' => check_plain($_GET['q']), 'view_base_path' => $view->get_path(), 'view_dom_id' => 1, 'pager_element' => $view->pager['element'], ), ), ),);drupal_add_js($settings, 'setting');views_add_js('ajax_view');然后加载我的js,这会将当前过滤器从location.hash添加到设置中。最后,加载视图。
var data = {};// Add view settings to the data.for (var key in Drupal.settings.views.ajaxViews[0]) { data[key] = Drupal.settings.views.ajaxViews[0][key];}// Get the params from the hash.if (location.hash) { var q = depreURIComponent(location.hash.substr(1)); var o = {'f':function(v){return unescape(v).replace(/+/g,' ');}}; $.each(q.match(/^??(.*)$/)[1].split('&'), function(i,p) { p = p.split('='); p[1] = o.f(p[1]); data[p[0]] = data[p[0]]?((data[p[0]] instanceof Array)?(data[p[0]].push(p[1]),data[p[0]]):[data[p[0]],p[1]]):p[1]; });}$.ajax({ url: Drupal.settings.views.ajax_path, type: 'GET', data: data, success: function(response) { var viewDiv = '.view-dom-id-' + data.view_dom_id; $('#content > div.limiter').html(response.display); // Call all callbacks. if (response.__callbacks) { $.each(response.__callbacks, function(i, callback) { eval(callback)(viewDiv, response); }); } }, error: function(xhr) { $('#content > div.limiter').html('<p id="artist-load-error">Error text.</p>'); $('#block-request-0').hide(); }, dataType: 'json'});这样,视图将通过常规流加载,并且一切都按预期运行=)



