[英]Change PHP session variable from AJAX call
我正在為一個學校項目建立一個網站。 我已經在 PHP 編程了大約一年,而 javascript 應該也不是什么大問題。
但是,幾天前我遇到了一個問題。 我的導航欄下有一個“警告/通知”欄。 有兩個按鈕,一個用於關閉通知,另一個用於重定向以閱讀更多相關信息。
如果您單擊關閉按鈕,我想對同一個文件進行 AJAX 調用,其中我有 PHP 代碼可以檢測該調用,然后更改 SESSION 變量,因此無論您使用哪個文件,通知都不會再次顯示在...上。
然而,無論我嘗試了多少種方法,這似乎都不起作用。 我已經受夠了這場斗爭,非常感謝這個美妙社區的任何幫助。
順便說一句,這都在同一個文件中。
這是 AJAX 代碼:
$("#close_warning").click(function(){
var info = "close";
$.ajax({
type:"POST",
url:"navbar.php",
data: info
});
});
這是 PHP 代碼(打印出 HTML):
<?php
require "includes/database.php";
$sql = "SELECT * FROM posts WHERE (post_sort = 'homepage' OR post_sort = 'everywhere') AND post_type = 'warning'";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if($_SESSION["closed_notification"] == 'no') {
if($resultCheck >= 1) {
while($row = mysqli_fetch_assoc($result)) {
$post_header = $row["header"];
$post_content = $row["post_content"];
$post_index = $row["post_index"];
echo '<div class="nav_bottom_holder_warning">
<div class="navbar_lower_container">
<p>'.$post_header.'</p>
<button class="btn" id="close_warning">Stäng</button>
<button class="btn" id="show_warning">Visa inlägg</button>
</div>
</div>';
}
}
}
?>
最后但同樣重要的是,負責更改實際 SESSION 的代碼:
<?php
$_SESSION["closed_notification"] = "no";
if(isset($_POST["info"])) {
$_SESSION["closed_notification"] = "yes";
}
?>
我已經嘗試了很多方法來解決這個問題,這只是其中之一。 在這一點上我只是不知道如何解決它,謝謝。
編輯:我已經將該文件包含在另一個包含“session_start()”命令的文件中。 所以在這個文件中使用它是沒有幫助的。
首先沒有session_start();
在第一行,所以它會給你一個 Session 變量的錯誤。
其次將您的 ajax 代碼更新為:
$("#close_warning").click(function(){
var info = "close";
$.ajax({
url: 'navbar.php',
type: 'post',
data: {info:info}
});
});
它基本上意味着data:{name1:variable2}
這里你將數據從 js variable(variable2) 'info' 提供給 php 作為 info(name ==> 我們通常設置輸入屬性) 所以在 php 你可以訪問它作為$_POST['info'];
.
最后你給了 js 變量值 'close' 並且你只是在更改 session 變量時檢查變量是否設置。
將其更改為實際檢查其他人閱讀您的代碼時更好更清晰的值。
概括:
將data: info
更改為data:{info:info}
只需使用 Javascript 本地存儲或 session 存儲。 我想服務器知道用戶是否已經關閉通知並不重要。
$("#close_warning").click(function(){
// close the notification
$("#notification").hide();
// set 'closed' flag in local storage
storage.setItem('closed', 1);
});
如果設置了“關閉”標志,則讓 javascript 隱藏通知。
if (storage.getItem('closed')) {
$("#notification").hide();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.