我正在开发一个显示有关远程服务器的各种数据的仪表板。它使用侧边栏上的按钮在服务器之间切换。例如,这是调用脚本的 html:
onclick="tab('localhost')"
这是 Ajax 位:
function tab(host){
$.ajax({
url: 'remote.php',
data: { tab: host },
success: function(result){
$('.container-body').html(result);
},
error: function(xhr, status, error) {
$('.container-body').html("<h1>" + error + "</h1>when opening " + host);
},
complete: function(){
$(init_ui);
$(update);
$('.tab').removeClass('active');
$('#dash').removeClass('active');
$('#'+host).addClass('active');
}
});
}
这应该将 $_SESSION["tab"] 设置为 "localhost",然后显示该服务器的数据。但是,它返回"Internal Server Error"。但是,如果我刷新页面,它会在会话设置为“localhost”的情况下正常加载。
如果我从 Ajax 调用中删除 GET 参数并从 remote.php 中删除 isset() 函数,Ajax 函数会返回成功但没有会话,暗示这是问题的根源。
这是remote.php的php配置
<?php
error_reporting(E_ALL ^ E_NOTICE);
session_start();
require_once 'config.php';
if(isset($_GET["tab"])) $_SESSION["tab"] = $_GET["tab"];
?>
没什么特别的,对吧?那么这里到底发生了什么?!
编辑:
由于某种原因,Ajax 不正确地处理会话,并且不正确的会话会导致 PHP 代码无效。
新问题:
Ajax 中的会话有什么特别之处?