在外部 js 文件中使用会话

Posted

技术标签:

【中文标题】在外部 js 文件中使用会话【英文标题】:Use session in external js file 【发布时间】:2019-07-31 06:27:31 【问题描述】:

我想在外部 js 文件中使用 session,但它不起作用。我知道无法访问外部 AJAX 文件中的会话,但有人有解决方案吗?

当我在视图中插入代码时,它运行正常,而且我认为 URL 也不正确!我使用 CodeIgniter 作为后端。

function show_msg() 
    $.ajax(
        type: 'ajax',
        url: '<?php echo base_url(); ?>index.php/chat/showmsg',
        async: false,
        dataType: 'json',
        success: function (data) 
            var user = '<?php echo $this->session->userdata('username'); ?>';
            var html = '';
            var i;
            for (i = 14; i >= 0; i--) 
                if (data[i].user !== user) 
                    html +=
                            '<span style="color:green;font-size:12px;">' + data[i].user + '</span>' + ' ' + '<span style="color:dimgrey;font-size:10px;">' + data[i].date + '</span>' + '<div style="margin-right:25px;margin-bottom:25px;border:0px solid grey; border-radius: 0px 12px 12px 12px; padding:10px;width:auto;background-color:white;;box-shadow:0px 0px 0px 0px grey;direction:rtl;">' + data[i].msg + '</div>';
                 else 
                    html +=
                            '<span style="color:green;font-size:12px;">' + "" + '</span>' + ' ' + '<span style="color:dimgrey;font-size:10px;">' + data[i].date + '</span>' + '<div style="margin-left:30px;margin-bottom:25px;border:0px solid grey; border-radius: 8px 0px 8px 8px; padding:10px;width:auto;background-color:#bbf490;box-shadow:0px 0px 0px grey;direction:rtl;">' + data[i].msg + '</div>';
                
            
            $('#show_data').html(html);
        
    );

【问题讨论】:

【参考方案1】:

没有直接的方法可以在外部 .js 文件中插入 PHP 变量。因为 PHP 不解析 js 文件。一种快速而肮脏的方法是在php视图文件中声明一个JS变量(由于全局变量污染,请谨慎声明变量,使用描述性名称)。

     <script type="text/javascript">
        var session_user_id = '<?php echo $this->session->userdata('username'); ?>';
        var base_url = '<?php echo base_url(); ?>';
    </script>

并在你的外部 js 文件中使用这个变量

        function show_msg() 
        $.ajax(
            type: 'ajax',
            url: base_url + 'index.php/chat/showmsg',
            async: false,
            dataType: 'json',
            success: function (data) 
                var user = session_user_id;
                var html = '';
                var i;
                for (i = 14; i >= 0; i--) 
                    if (data[i].user !== user) 
                        html +=
                                '<span style="color:green;font-size:12px;">' + data[i].user + '</span>' + ' ' + '<span style="color:dimgrey;font-size:10px;">' + data[i].date + '</span>' + '<div style="margin-right:25px;margin-bottom:25px;border:0px solid grey; border-radius: 0px 12px 12px 12px; padding:10px;width:auto;background-color:white;;box-shadow:0px 0px 0px 0px grey;direction:rtl;">' + data[i].msg + '</div>';
                     else 
                        html +=
                                '<span style="color:green;font-size:12px;">' + "" + '</span>' + ' ' + '<span style="color:dimgrey;font-size:10px;">' + data[i].date + '</span>' + '<div style="margin-left:30px;margin-bottom:25px;border:0px solid grey; border-radius: 8px 0px 8px 8px; padding:10px;width:auto;background-color:#bbf490;box-shadow:0px 0px 0px grey;direction:rtl;">' + data[i].msg + '</div>';
                    
                
                $('#show_data').html(html);
            
        );
    

【讨论】:

以上是关于在外部 js 文件中使用会话的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 typescript 在外部 js 文件中调用函数

从按钮单击事件直接调用存储在外部 JS 文件中的 JavaScript 函数

如何使 STATIC_URL 在外部 JS 文件(Django)中工作

在外部 Javascript 文件中使用 PHP 代码

放置在外部脚本文件中时 Javascript 不执行

Laravel 中是不是有任何方法可以在外部 API 中验证用户并将其保存到本地会话,以便我可以使用所有 User:: 和 Auth:: 函数?