Ajax 加载的内容在 Drupal 中引用了错误的节点 ID

Posted

技术标签:

【中文标题】Ajax 加载的内容在 Drupal 中引用了错误的节点 ID【英文标题】:Ajax loaded content referencing wrong node id in Drupal 【发布时间】:2012-05-28 13:07:04 【问题描述】:

我有一个节点列表,每个节点都可以单击。单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。 Jquery 通过 content-type-tpl.php 上的隐藏输入值收集节点参考号。同样,新视图中的每个节点都有一个单击,该单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。然而,虽然原始视图中的点击工作正常,但新调用视图中的点击并没有引用正确的节点。不是引用被点击节点的节点id,而是收集视图中下一个节点的节点id。奇怪的是,在 content-type-tpl.php 上放置 <?php echo $node->nid;?> 时,页面上会回显正确的节点 ID。但遗憾的是,这不是发送到视图参数的那个。因此,单击新加载的 ajaxed 视图中的任何节点,都会发送下一个节点的 id。这是javacript:

Drupal.behaviors.ajaxlinks = function (context) 
    $('.morelink:not(.togg-processed)', context).addClass('togg-processed').each(function () 
      var myindex = $('.morelink').index($(this));
      var target = $('.newthing').eq(myindex)
      var nid = $(".mynid").eq(myindex).val();
    $(this).click(function() 
if (($('.hiddenrows').eq(myindex).is(":hidden")))
    $('.hiddenrows').eq(myindex).show();
    $('.newthing').eq(myindex).show();
      var toLoad = Drupal.settings.basePath + 'replies/' + nid;
      xhr = $.ajax(
        url: toLoad,
        success: function(data) 
        $(target).html($(data));
     Drupal.attachBehaviors(context);

);

else

    $('.hiddenrows').eq(myindex).hide();
    $('.newthing').eq(myindex).hide();

    return false;

这是相同的代码,所以我看不出为什么它在新加载的视图中工作方式不同。谁能发现我做错了什么?我怀疑这与放置变量或声明变量的方式有关。或者可能与滥用 index 、 eq 或 this 有关?

【问题讨论】:

【参考方案1】:

看起来 Drupal.attachBehaviors 应该在 (target) 而不是 (context) 上触发。它在整个上下文中重新启动脚本,而不仅仅是新的 ajaxed 内容。所以我改变了 Drupal.attachBehaviors(context);到 Drupal.attachBehaviors(target);

现在可以了!

【讨论】:

以上是关于Ajax 加载的内容在 Drupal 中引用了错误的节点 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax将drupal视图加载到右边距

Drupal 内容类型中节点引用的错误标签

使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax

Drupal 查看 Ajax 块验证消息

ajax 页面加载视图页面的 ajax 寻呼机由 ajax

根据drupal中的其他分类术语加载分类内容