所以到目前为止,我一直在查看Stackoverflow上所有可能的答案。但无论我如何尝试,我都无法让它发挥作用。
我正在尝试根据点击的链接设置会话变量。
这可以是'grid'或'list'
我可以更改类,以及相应div的视图。但是,我的$ .post调用php并没有传递变量(我假设这个,因为没有任何反应)或者我的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>
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将不会更新。
答案 0 :(得分:2)
这就是我要做的事情(为了快速而削减一些代码):
HTML(如果使用jQuery,则不需要javascript无效代码):
<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中,您可以转到检查器,选择网络标签,点击按钮,然后关注请求。
答案 1 :(得分:0)
尝试将您的php包含在jQuery文件中(仅用于测试)并回显一些echo 'Foobar';
并在您的jQuery执行文件中添加<?php include('../library/fx.behaviour.php');
并尝试更改包含行中的目录
答案 2 :(得分: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 );
}
}