首页 > 解决方案 > 清除事件 ID 并调用新的事件 ID 而无需刷新页面

问题描述

我正在解析来自 mysql 的事件数组并将它们列出到登录页面中。用户可以单击按钮向活动组织者发送消息。用户应该在发送电子邮件之前登录,所以我发送了带有 http 请求的事件 ID,并在发送会话时将其返回,而不是通过 ajax 调用以填充模式并发送消息。到目前为止一切都很好,但是用户应该重新加载页面以清除最后一个事件 id 并重新调用一个新的。

下面是我设置的代码,data-jid="<?= $jid; ?>"它设置了附加到按钮的事件 ID,并在重定向到登录页面后通过 http 请求发送它

                    <?php if ($this->session->userdata('is_user_login')) : ?>
                        <button type="button" class="btn btn-secondary btn-block rounded contactBiz" data-toggle="modal" data-jid="<?= $jid; ?>"  data-target="#modalApply"><?=trans('apply')?></button>
                    <?php  else:
                        $last_request_page = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

                        $this->session->set_userdata('last_request_page', $last_request_page); 
                    ?>
                        <a href="<?= base_url(); ?>auth/login?id=<?= $jid; ?>" data-jid="<?= $jid; ?>" class="btn btn-secondary btn-block rounded preapply"><?=trans('apply')?></a>
                    <?php endif; ?>

在登录页面中,我将事件 ID 的会话设置如下:

<?php
    if(isset($_GET['id'])) {
        $this->session->set_userdata('event_id', $_GET['id']);
    }
?>

现在,在用户重定向回来后,最后点击的按钮将被填充以使用下面的 javascript 调用发送消息。

<?php if (!empty($this->session->userdata('event_id'))) {
    $sID = $this->session->userdata('event_id'); ?>

    $(document).ready(function(){
        $(".contactBiz").trigger("click");
    });

<?php } ?>
<?php if ($this->session->userdata('is_user_login')) : ?>
        $('.contactBiz').click(function(e){
            e.preventDefault();
            var id;
            var csrfName = '<?php echo $this->security->get_csrf_token_name();?>';
            var csrfHash = '<?php echo $this->security->get_csrf_hash();?>';

            var data = {
            <?php if (!empty($this->session->userdata('event_id'))) { ?>
                id: <?= $sID; ?>,
            <?php } else { ?>
                id: $(this).attr('data-jid'),
            <?php } ?>
                uid: <?= $this->session->userdata('user_id'); ?>,
            };
            data[csrfName] = csrfHash;

            $.ajax({
                cache: false,
                url: base_url + 'job-data',
                dataType: 'json',
                type: 'POST',
                data: data,
                error: function(jqXHR, textStatus, errorThrown) {
                    alert('Something is wrong');
                },
                success: function(data) {
                    console.log(data);
                    $("#subject").val(data[0].title);
                    $(".messageTitle").empty().append( " <?= trans('message'); ?> " + data[0].name + " about " + data[0].title );
                    p1 = data[0].business_id;
                    p2 = data[0].email;
                    <?php $this->session->unset_userdata('event_id'); ?>
                } 
            }); 

        });
<?php endif; ?>

现在一切都很好,最后点击的按钮是使用事件 id 填充的,data-jid="<?= $jid; ?>"但是接下来发生的事情是用户被所有按钮重复的相同事件 id 卡住了。

我在 ajax 调用中用于定义 id 的解决方案如下:

        <?php if (!empty($this->session->userdata('event_id'))) { ?>
            id: <?= $sID; ?>,
        <?php } else { ?>
            id: $(this).attr('data-jid'),
        <?php } ?>

在成功的 ajax 响应之后,我正在清除会话,如下所示:

            <?php $this->session->unset_userdata('event_id'); ?>

我认为我的错误在这里,但是我找不到更好的解决方案,非常感谢您的建议,谢谢!

标签: phpjqueryajaxcodeignitersession

解决方案


推荐阅读