当前位置: 首页 > 面试题库 >

使用AJAX嵌入视图

阴永逸
2023-03-14
问题内容

我有一个带有一个参数的视图,以及一组暴露的过滤器。当用户过滤视图时,将使用Ajax提交表单,并使用location.hash将过滤器附加到url。

我的目标是在location.hash中存在筛选器时,在初始页面加载时筛选视图。

当前,我正在通过Ajax回调加载视图,它工作得很好。但是最大的问题是该视图的Ajax无法正常工作。

这是加载视图的回调。

// Load the view object.
$view = views_get_view('taxonomy_term');
$view->set_display('page');
$view->set_use_ajax(TRUE);

// Pass the current tid as the argument.
$view->set_arguments(array($tid));
// Set the current page.
$view->set_current_page($page);
// Set the exposed filters.
$view->get_exposed_input();

// Execute.
return $view->execute_display();

当我直接导航到该回调时,一切正常。但是当我通过Ajax加载它时不是。

有任何想法吗?

更新:似乎出于某些原因,Drupal.behaviors.ViewsAjaxView()未执行。如果我手动执行它,则一切正常。


问题答案:

好的,所以我找到了答案。

现在从常规的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 = decodeURIComponent(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'
});

这样,视图将通过常规流加载,并且一切都按预期运行=)



 类似资料:
  • 我试图在基于bootstrap 2.2.2的设计中嵌入HTML5视频,但它在Firefox上不起作用,但它在chrome上运行良好,但在Firefox上说我尝试将这些添加到.htaccess文件中,并将其上传到根目录中,但这也没有帮助。 null 注意:我看了前面关于stackoverflow的问题,但没有运气,而且我没有apache配置文件来允许视频样式,因为我是在共享主机上。

  • 我可以向您展示比告诉您更好的内容,所以这里是我的XML代码的结构: 因此,如您所见,我有一个,其中包含片段并支持滚动。 问题: 我有几个片段,每个片段都有自己的布局,应该在一次放纵中向下滚动。 一切都很完美,一切都可以顺利滚动,但是当我添加一个 并使用 包装它时,它无法正常工作。当我向下滚动时,将手指从屏幕上移开后,它会立即停止。 看看代码: 如果删除,它可以工作。 你知道那可能是什么吗? 谢谢你

  • 问题内容: 我检查了这个问题,它解决了我的最初问题。但是我不希望仅当用户单击链接时才显示部分视图,我希望在页面加载时显示部分视图,并且可能在加载部分视图时显示进度指示器。 如何实现? 非常感谢您阅读本文。 问题答案: 如果要加载页面,然后通过ajax加载部分视图,则可以创建一个执行以下操作的对象: 然后在您的页面中执行以下操作:

  • 本文向大家介绍HTML5如何嵌入视频?相关面试题,主要包含被问及HTML5如何嵌入视频?时的应答技巧和注意事项,需要的朋友参考一下 和音频类似,HTML5支持MP4、WebM和Ogg格式的视频,下面是简单实例:  

  • 我正在寻找HAL中嵌套_embedded如何使用Spring HATEOAS API编程的例子。最佳实践是什么? 下面是我想要实现的一个例子:

  • 问题内容: 我在MVC应用程序中有此标记。 当它运行时,IngredientsListControl.ascx在浏览器中显示为新页面,并且不会更新Ingredientlistdiv。 这是我的控制器动作 我在这条线上做对了吗? 这就是我将控件呈现到div中的方式,以便它不会加载新页面。 马尔科姆 问题答案: 使用此功能时: …您应该注意,这与 它不会引发onsubmit事件,并且不会调用MVC的A