0

所以到目前为止,我一直在 Stackoverflow 上查看所有可能的答案。但无论我如何尝试,我都无法让它发挥作用。

我正在尝试根据单击的链接设置会话变量。

这可以是“网格”或“列表”

我可以更改类,以及相应 div 的视图。但是,我对 php 的 $.post 调用没有传递变量(我假设这是因为什么都没有发生)或者我的 php 调用是错误的。

这是我的代码:

HTML

<li class="display-control-list-item" > <a href="javascript: void(0)" class="js-set-display list" id="list" > Listview </a> </li>
<li class="display-control-list-item" > <a href="javascript: void(0)" class="js-set-display grid" id="grid" > Gridview </a> </li>

查询

 function set_display_type( type ) {
   if ( type == 'grid' ) {
     $( '.js-set-display.list' ).removeClass( 'active' );
     $( '.js-set-display.grid' ).addClass( 'active' );
     $( '.content-inner' ).attr({ 'class' : 'container content-inner gridview' });
     var view = 'gridview';
     $.post( 'library/fx.behaviour.php' , { setdisplay: view });
   }
   if ( type == 'list' ) {
     $( '.js-set-display.grid' ).removeClass( 'active' );
     $( '.js-set-display.list' ).addClass( 'active' );
     $( '.content-inner' ).attr({ 'class' : 'container content-inner listview' });
     var view = 'listview';
     $.post( 'library/fx.behaviour.php' , { setdisplay: view });
   }
 }

和我在 fx.behaviour.php 中的 PHP

$_SESSION[ 'display' ] = 'listview'; // set default
if ( $_POST[ 'setdisplay' ] != '' ) {
  $view = $_POST[ 'setdisplay' ];
  $_SESSION[ 'display' ] = $view;
}

简而言之:单击 url 并通过 jquery 将值传递给 php 后,会话变量不会更新。

4

3 回答 3

2

这就是我要做的(为了快速而删掉一些代码):

HTML(如果使用 jQuery,则不需要 javascript void 代码):

<ul id="set-display">
    <li><a href="" id="list">Listview</a></li>
    <li><a href="" id="grid">Gridview</a></li>
</ul>

jQuery:

$('#set-display a').click(function(e) {
    var type = $(this).attr('id');
    var view = (type === 'grid') ? 'gridview' : 'listview';
    $.post('library/fx.behaviour.php', { display: view });

    // you can use the view or type variable to trigger your other code
});

PHP:

session_start(); // if not called already

// if POST display not empty and is expected string then use it, otherwise default to 'listview'
$_SESSION['display'] = ( ! empty($_POST['display']) && in_array($_POST['display'], array('listview', 'gridview'))) ? $_POST['display'] : 'listview';

我使用$_POST['display']而不是setdisplay为了命名一致性。检查您的 jQuery 调用是否获得有效的 200 响应也可能是值得的。在 Chrome 中,您可以通过转到 Inspector、选择网络选项卡、单击按钮并观察请求来执行此操作。

于 2013-04-29T23:29:08.457 回答
0

尝试将您的 php 包含到 jQuery 文件中(只是为了测试)并回显某些echo 'Foobar';内容并在您的 jQuery 执行文件中添加<?php include('../library/fx.behaviour.php');并尝试更改包含行中的目录

更新

试试这个

于 2013-04-29T23:15:38.337 回答
0

在函数范围内访问字符串时,我认为您不应该使用 {}:

function set_display_type( type ) {
   if ( type == 'grid' ) {
     $( '.js-set-display.list' ).removeClass( 'active' );
     $( '.js-set-display.grid' ).addClass( 'active' );
     $( '.content-inner' ).attr({ 'class' : 'container content-inner gridview' });
     var view = 'gridview';
     $.post( 'library/fx.behaviour.php' , setdisplay: view );
   }
   if ( type == 'list' ) {
     $( '.js-set-display.grid' ).removeClass( 'active' );
     $( '.js-set-display.list' ).addClass( 'active' );
     $( '.content-inner' ).attr({ 'class' : 'container content-inner listview' });
     var view = 'listview';
     $.post( 'library/fx.behaviour.php' , setdisplay: view );
   }
 }
于 2013-04-29T23:26:45.213 回答