在外部 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)中工作
Laravel 中是不是有任何方法可以在外部 API 中验证用户并将其保存到本地会话,以便我可以使用所有 User:: 和 Auth:: 函数?