我正在尝试实施一个"添加朋友"用户个人资料页面上的按钮,用于我的社交网络。单击时,它应发送一个AJAX请求,并更改它的值。有四种可能的值:"添加朋友","取消请求","删除朋友"和"接受朋友"。
我将用户的ID保存在会话变量中,以及当前正在查看其个人资料的用户的ID。
这是我的代码:
(function (jQuery) {
var friendButton = $('.friend_button');
friendButton.on('click', function (e) {
e.preventDefault();
var self = $(this),
buttonClicked = self.attr('name');
$.ajax({
type: 'post',
url: '../php/profile.php',
data: { 'buttonClicked': buttonClicked },
dataType: 'json',
success: function (data) {
self.attr('name', data['name'].trim());
self.attr('value', data['value'].trim());
}
});
});
})($);
这是我的服务器端:
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
if ($_POST['buttonClicked']) {
if (!session_id()){
session_save_path($_SERVER[DOCUMENT_ROOT]."/tmp");
session_start();
}
if ($_POST['buttonClicked'] === 'remove_friend'){
session_save_path($_SERVER[DOCUMENT_ROOT]."/tmp");
if (!session_id()){
session_start();
}
remove_friend_db($conn, $_SESSION['id'], $_SESSION['current_id']);
echo json_encode(array('name' => 'add_friend', 'value' => 'Add friend'));
}//end of checking remove_friend
if ($_POST['buttonClicked'] === 'add_friend'){
if (!session_id()){
session_save_path($_SERVER[DOCUMENT_ROOT]."/tmp");
session_start();
}
add_request($conn, $_SESSION['id'], $_SESSION['current_id']);
echo json_encode(array('name' => 'cancel_request', 'value' => 'Cancel request'));
}//end of checking add_friend
if ($_POST['buttonClicked'] === 'cancel_request'){
if (!session_id()){
session_save_path($_SERVER[DOCUMENT_ROOT]."/tmp");
session_start();
}
cancel_request_db($conn, $_SESSION['id']);
echo json_encode(array('name' => 'add_friend', 'value' => 'Add friend'));
}//end of checking cancel_request
if ($_POST['buttonClicked'] === 'accept_friend'){
session_save_path($_SERVER[DOCUMENT_ROOT]."/tmp");
if (!session_id()){
session_start();
}
add_friendship($conn, $_SESSION['id'], $_SESSION['current_id']);
echo json_encode(array('name' => 'remove_friend', 'value' => 'Remove friend'));
}//end of checking accept_friend
}//end of checking buttonClicked
}//end of checking POST
现在,问题是当我点击"添加朋友"这是第一次,一切都运作良好。请求被发送到数据库,按钮将其值更改为"取消请求"。然后,当我点击"取消请求"时,一切仍然正常,请求从数据库中删除,按钮将其值更改为"再次添加好友"
但是,当我点击"添加朋友"再次(第二次),它发送一个AJAX请求,但我的会话变量是空的,并且请求不能插入数据库。如果我刷新页面,情况是相同的,按钮只在第一次工作。
那么为什么会话变量是空的?
以下是表格:
<form action="../php/profile.php" method="post">
<?php if (is_friend($conn, $_SESSION['id'], $_SESSION['current_id'])) : ?>
<input class="friend_button" type="submit" name="remove_friend" value="Remove friend">
<?php elseif (is_sent_request($conn, $_SESSION['id'])) : ?>
<input class="friend_button sent" type="submit" name="cancel_request" value="Friend request sent">
<?php elseif (requested_friendship($conn, $_SESSION['id'])) : ?>
<input class="friend_button" type="submit" name="accept_friend" value="Accept friendship">
<?php else : ?>
<input class="friend_button" type="submit" name="add_friend" value="Add friend">
<?php endif; ?>
</form>
编辑:我现在意识到只有$ _SESSION [&#39; current_id&#39;]正在丢失。我从查询字符串中获取了它的值。但我仍然不明白发生了什么。
EDIT2:无论如何,我不知道如何解决这个问题,所以我修改了我的代码。我已将用户的ID连接到按钮名称属性。例如,name =&#34; add_friend-2&#34;,或name =&#34; cancel_request-2&#34;。在AJAX请求之前,我拆分该字符串,然后分别发送按钮名称和ID。在服务器端,我处理请求,使用给定的ID和我自己的ID(保留在会话变量中),然后返回用户的ID,在AJAX回调中,我将它连接回新的按钮名称。现在一切正常,但我仍然对那个会话问题感到困惑。
答案 0 :(得分:0)
我做的最好的方法是首先set_flashdata($ data)然后在ajax调用函数或控制器结束时再次设置flashdata()中的数据,这样每次你的ajax调用重复它时数据都可用自。