通过jquery click事件在php中设置会话变量

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

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

这可以是’网格’或’列表’

我可以更改类,以及相应div的视图。 但是,我的$ .post调用php并没有传递变量(我假设这个,因为没有任何反应)或我的php调用是错误的。

这是我的代码:

HTML

  • Listview
  • Gridview
  • JQUERY

      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 }); } } 

    和我的PHP在fx.behaviour.php中

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

    简而言之:在点击url并通过jquery将值传递给php后,sessionvariable将不会更新。

    这就是我要做的事情(为了快速切出一些代码):

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

      

    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中,您可以通过转到检查器,选择网络选项卡,单击按钮并查看请求来执行此操作。

    尝试将你的php包含在jQuery文件中(只是为了测试)并回显一些echo 'Foobar'; 并在你的jQuery执行文件中添加 并尝试更改包含行中的目录

    UPDATE

    试试这个

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

     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 ); } }