jQuery 和 ajax 在 PHP 中设置会话变量

Posted

技术标签:

【中文标题】jQuery 和 ajax 在 PHP 中设置会话变量【英文标题】:jQuery and ajax to set session variable in PHP 【发布时间】:2015-04-07 22:02:47 【问题描述】:

我在 php 中使用会话变量来管理多语言站点中的当前语言。为了实现我想要的,我使用了一个标志图标,当单击它时(jQuery)它告诉 lang_json.php 将会话变量切换到新语言。

我在 jQuery 方面没有收到错误:

var sendData =  'en';  

$.ajax(
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "lang_json.php",
    data: (newLang: sendData), 
    dataType: "json",
    success: function (msg) 
      alert('Success');
    ,
    error: function (err)
      alert('Error');
    
);

但是 PHP 文件没有设置会话变量:

lang_json.php:

<?php

// Session variables
session_name('aklogin'); // Starting the session
session_start();

if( isset($_POST['newLang']) )
    $_SESSION['current_lan'] = $_POST['newLang'];
else
    $_SESSION['current_lan'] = "Not Posting";


?>

会话变量返回“Not Posting”。

【问题讨论】:

你是如何测试的? 您可以试试:data: ("newLang": sendData),用引号中的“newLang”吗?看起来它正在尝试使用那里不存在的变量。是不是在该行代码的 javascript 面板中抛出错误? JavaScript 面板上没有错误。 我正在通过 Chrome 开发者工具测试 jQuery。 看起来 Json 内容类型被抛弃了。 【参考方案1】:

您声称您正在向服务器发送 JSON,但是:

你不是 PHP 未设置为接收 JSON

删除contentType: "application/json; charset=utf-8",,然后jQuery 将设置正确的内容类型,PHP 将填充$_POST

【讨论】:

【参考方案2】:

我一直在玩 jQuery 方面,这是有效的:

var sendData =  'en'; 

$.ajax(
    type: 'POST',
    url: 'app/pro/pro_lang_session_json.php',
    data: 'newLang': sendData, 
    success: function (msg) 
        alert(sendData);
    ,
    error: function (err)
        alert('Error');
    
);

会话变量使用此代码设置为“en”。

感谢您的帮助! @DelightedDOD

【讨论】:

以上是关于jQuery 和 ajax 在 PHP 中设置会话变量的主要内容,如果未能解决你的问题,请参考以下文章

从对象 php 的 jquery 数组中设置值?

Rails 没有在 ajax 帖子上重新加载会话

如何设置会话的生命周期

为啥 Chrome 和 Firefox 以不同方式处理 jQuery ajax() 回调中设置的 javascript 变量?

为啥 Chrome 和 Firefox 以不同方式处理 jQuery ajax() 回调中设置的 javascript 变量?

从 Jquery Ajax 调用中设置 CodeMirror 文本区域的值