Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jquery和PhP设置会话始终在第二次加载[Opencart]时工作_Php_Ajax_Session_Opencart - Fatal编程技术网

使用Jquery和PhP设置会话始终在第二次加载[Opencart]时工作

使用Jquery和PhP设置会话始终在第二次加载[Opencart]时工作,php,ajax,session,opencart,Php,Ajax,Session,Opencart,我试图用jquery检测主页上的窗口宽度,并用ajax将其传递给php,然后用php在模板中返回 如果我在模板中打印$\会话,我可以看到第一页加载时没有新的\会话。如果我再次刷新,我可以看到,如何在第一页加载时对问题进行排序以设置会话 在template\common\home.tpl中 $(window).on('load', function(){ var width = $(window).width(); var divice = ''; if (width < 768) {

我试图用jquery检测主页上的窗口宽度,并用ajax将其传递给php,然后用php在模板中返回

如果我在模板中打印$\会话,我可以看到第一页加载时没有新的\会话。如果我再次刷新,我可以看到,如何在第一页加载时对问题进行排序以设置会话

在template\common\home.tpl中

  $(window).on('load', function(){
var width = $(window).width();
var divice = '';
if (width < 768) {
  divice = 'mobile';
}else if (width > 768 && width < 992) {
  divice = 'tablet';
}else if (width > 992) {
  divice = 'pc';
}

$.ajax({
  url: 'index.php?route=common/home/setDivice',
  type: 'post',
  data: 'divice='+divice,
  dataType: 'json',
  success: function(){

  }
});
})

您遇到的问题是,您正在通过Ajax更新会话中的值-但是由于PHP在屏幕上呈现任何内容之前就已经完成了工作,因此您实际上没有任何方法访问
$\u会话
变量。。。除了发出另一个Ajax请求。。。这使得整个过程过于复杂。只需使用JS设备变量值。。。更好的是,如果你能用CSS(例如,它只是显示的东西)来完成这一切,那么就这样做,不要用PHP真正不应该关心的东西来打扰它。@CD001问题是在DB中,根据分区宽度,每个块设置3个不同的图像,在数组中,我有$block_image['mobile'],$block_image['tablet']$block_image['pc']我应该根据分区宽度来改变它们,知道怎么做吗?我觉得你把它复杂化了。。。只需以非常非常低的质量使用一个非常大的图像-它可以降低文件大小,同时利用大多数现代浏览器在动态调整图像大小时利用GPU来消除图像别名的事实。。。这消除了人工制品的压缩问题。或者返回JSON中的所有3个图像路径,让JS决定使用哪一个。老实说,我认为这是最好的客户端处理;PHP没有理由知道/关心查看页面的设备类型。
public function setDivice(){

    $this->session->data['new_session'] = $_POST['divice'];

}