Ajax 登录后动态更新 PHP 生成的元素

Posted

技术标签:

【中文标题】Ajax 登录后动态更新 PHP 生成的元素【英文标题】:Dynamically update PHP generated elements after Ajax login 【发布时间】:2018-06-29 08:03:29 【问题描述】:

我通过 Ajax 无限滚动在页面 (cmets) 上加载内容,并且我也使用 Ajax 登录/退出。现在成功登录后,我想根据用户喜欢或不喜欢的内容更新回复或喜欢按钮。

简单的方法是不使用 Ajax 登录/退出或刷新页面,因为我检查用户喜欢/不喜欢 php 的内容,如果页面没有得到刷新,这些脚本不会再次触发。

但是如果我刷新页面,所有加载的 cmets 都消失了,用户需要再次滚动。我发现的一种解决方案是使用load() 方法用脚本刷新div,但我不确定这是要走的路。那么基本上我如何在从 PHP 生成的 Ajax 登录后动态更新页面上的元素?

让我解释得更好:

假设我有一个 PHP 脚本来进行这项检查:

<?PHP
 $q = $db->query("SELECT who_liked FROM likes WHERE(com_liked = com_id AND who_liked = curent_user_id)"); //actual query uses prepared statments, this is for example
 $count = $q->rowCount();

 if($count > 0)
  echo "<style> #like_btnbackground-color: green; </style>";
 
?>

因此,如果用户未登录,所有喜欢/不喜欢按钮都是灰色的。现在通过Ajax登录,用户使用电子邮件/用户名和密码登录,登录会话启动用户名,个人资料图像根据用户ID从数据库中选择并显示在页面/导航栏上.现在我需要检查一下用户喜欢什么等等,我应该在 Ajax 响应中进行检查吗?我应该使用load() 来刷新 cmets 的喜欢/不喜欢以及检查它的脚本吗?我应该将所有 php 脚本放在 Ajax 响应中,以便它们在成功登录时触发吗?(我认为女巫是要走的路)

例如:

    ,success: function(response) // php scripts with the sql query for all the checks

【问题讨论】:

我对你的问题有点困惑。您希望能够保留用户登录后已加载的已加载 cmets? @JeanPaul98 是的,如果我使用 ajax 登录它可以工作,但我还想更新用户喜欢或不喜欢的 cmets 上的喜欢/不喜欢按钮 如果我没记错的话,您想在 AJAX 请求的响应事件中切换喜欢/不喜欢按钮,并且还想识别喜欢和不喜欢的按钮吗? 你还需要防止双重喜欢吗? 【参考方案1】:

试试下面的代码,

在登录响应中发送一个 JSON 编码的数组,

<?PHP

 $q = $db->query("SELECT who_liked FROM likes WHERE(com_liked = com_id AND who_liked = curent_user_id)"); //actual query uses prepared statments, this is for example
 $count = $q->rowCount();

 if($count > 0)
  $response = ['success' => true];
  else 
     $response = ['success' => true];
 

 echo json_encode($response);

?>

使用下面的 CSS 脚本,

<style type="text/css">
    .like_btn
        background-color: green;
    

    .like_btn.liked 
        background-color: orange;
    

    .like_btn.not-liked 
        background-color: grey;
    
</style>

添加

不喜欢

在 PHP 页面加载时将 CSS 类用于不喜欢的按钮,如下所示,

<button class="like_btn not-liked">Like Button</button>

然后您将能够识别喜欢/不喜欢和不喜欢的按钮。

使用

喜欢

喜欢按钮的 CSS 类。因此,您可以随时使用 javascript 切换按钮。

<button class="like_btn liked">Like Button</button>

最后是 JQuery AJAX 脚本,

<script type="text/javascript">
    $.ajax(
        url: '/path/to/file',
        type: 'default GET (Other values: POST)',
        dataType: 'json',
        data: param1: 'value1',
        success:function(res) 
            // On Login Success
            if(res.success) 
                $('.like_btn').toggleClass('not-liked');
            
        
    );
</script>

如果您需要进一步说明,请随时离开 cmets。

【讨论】:

以上是关于Ajax 登录后动态更新 PHP 生成的元素的主要内容,如果未能解决你的问题,请参考以下文章

jquery mobile listview使用ajax动态加载后,跳转到其他页面返回时数据没有保存如何解决?

利用ajax动态生成元素Jquery无法获取新创建的元素的解决方法

使用PHP中的ajax做登录页面验证用户名是否可用动态调用数据库

使用PHP中的ajax做登录页面验证用户名是否可用动态调用数据库

在使用 php for 循环生成 div 并为它们动态分配 ids 后,我如何使用 jquery 定位 ids?

14.ajax基础知识用ajax做登录页面用ajax验证用户名是否可用ajax动态调用数据库