Jquery ajax POST php会话确定活动页面

时间:2014-10-27 15:01:37

标签: javascript php jquery ajax cakephp

我正在运行CakePHP 2.5.X,我们有CMS设置,可以在管理员中创建页面,然后与导航相关联。我还添加了将页面设置为链接的选项,因此我们没有重复的内容/页面。我们发现问题是,如果我们创建一个页面(A)作为父页面,另一个父页面(B)然后有一个子页面(C),其内容与它的父项为A,然后创建同一页面(D),没有内容但设置了一个URL变量,以便导航系统知道这是一个指向C的链接。

示例HTML:

<ul class="nav">
    <li data-id="1"><a href="/a">A
        <ul>
            <li data-id="2" parent-page="1"><a href="/c">C</li>
         </ul>
    </li>
    <li data-id="3"><a href="/b">B
        <ul>
            <li data-id="4" parent-page="3"><a href="/c">D</li>
         </ul>
    </li>
</ul>

问题是,当单击D时,您将被发送到页面C,然后将页面A设置为活动页面。为了防止这种情况并确保B和D保持为活动链接(class =“active”),我使用jquery和ajax发布到php脚本,然后将页面ID写入我可以阅读的会话页面加载并将相应的页面设置为活动。但它似乎不起作用。在Chrome中我没有问题,它的FireFox,IE,Safari等给我带来了问题。基本上它不起作用或只是部分起作用。

$("ul.child li a").click(function() {
    $.ajax({
        type: 'POST',
        url: "/users/setSession/", 
        data : {
            current_page_id: $(this).parent().attr('data-id'), 
            page_parent_id: $(this).parent().attr('page-parent')
        }
    }).done(function(msg) {
    <?php if ($this->Session->check('User.User.id') == 1) { ?>
        alert(msg);
    <? } ?>
    });
});

有没有人有任何想法或其他解决方案?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下解决方案。在current_page_id和parent_page_id上​​附加class =“active”。

$("ul.child li a").click(function(e) {
e.preventDefault() //preventing the anchor clicked event
$.ajax({
    type: 'POST',
    url: "/users/setSession/", 
    data : {
        current_page_id: $(this).parent().attr('data-id'), 
        parent_page_id: $(this).parent().attr('parent-page') //changed_by_me
    }
}).done(function(msg) {
    ///////////////Added following lines////////////////
    var activeLi = $('ul.nav').find('li[data-id="'+current_page_id+'"]');
    activeLi.addClass('active').closest('li[data-id="'+parent_page_id+'"]').addClass('active');
    //$('ul.nav').find('li[data-id="'+parent_page_id+'"]').addClass('active');

<?php if ($this->Session->check('User.User.id') == 1) { ?>
    alert(msg);
<? } ?>
});
});

答案 1 :(得分:0)

最后,我们决定只使用不同名称的重复页面,只做一个无索引。遗憾的是,除了Chrome之外,我们无法在任何浏览器中使用它。