Ali*_*lif 1 javascript php codeigniter
我有一个使用 javascript ajax 的代码,如下所示:
$.ajax({
type: "POST",
url: "<?= site_url('test/test'); ?>",
dataType: "JSON",
data: {
id: id,
name: name,
},
success: function(data){
var data = {
"id": id,
"name": name,
}
<?php if ($this->session->userdata('class') == 'employee') { ?>
console.log('a');
<?php } else { ?>
console.log('b');
<?php } ?>
}
})
Run Code Online (Sandbox Code Playgroud)
我可以在 ajax 代码中使用 session 吗?
您只能将 PHP 变量(例如 Session)用作作为硬编码值嵌入到代码中的内容,例如,如果您编写代码,那么您将创建一个 JS 变量,该变量在脚本启动时具有 Session 值。假设该示例中的 Sesion 值为“hello”,那么在浏览器接收并执行的最终 JavaScript 中,您将看到以下行:作为硬编码片段。var x = '<?php echo $_SESSION["x"]; ?>';xvar x = "hello";
这是因为 PHP 在服务器上执行,并生成 HTML 和 JS,然后在 PHP 停止执行后发送到浏览器。
您不能做的只是像您在示例中所做的那样在 JavaScript 中内联编写 PHP,并期望它做任何事情。该 PHP 将在您的 JavaScript之前执行,并且PHP的结果/输出(如果有)将嵌入到 JavaScript 中(或用于准确控制生成什么 JavaScript 并将其发送到浏览器)。
如果在执行 JavaScript 代码的过程中需要与服务器交互,但不回传整个页面,则需要进行 AJAX 请求,因此它会向服务器生成一个新的 HTTP 请求,该请求可以执行 PHP 脚本和然后将响应返回给 JavaScript 进行处理。
在您问题的具体示例中,由于您已经在发出 AJAX 请求,该请求可以将数据从 PHP 返回到 JavaScript,我建议您只需在响应数据中包含所需的 Session 值,然后编写一些 JavaScript 来读取该值并决定做什么。
进一步阅读:客户端和服务器端编程有什么区别?
你应该把代码分开:
PHP端:
<?php
# what ever other code there is
echo $this->session->userdata('class');
Run Code Online (Sandbox Code Playgroud)
JS端:
$.ajax({
type: 'POST',
url: '/path/to/phpfile.php',
dataType: 'JSON',
data: {id: id, name: name},
success: function(response)
{
var data = {
'id': id,
'name': name,
}
if (response == 'employee') {
console.log('a')
} else {
console.log('b')
}
}
})
Run Code Online (Sandbox Code Playgroud)
现在我们只检查响应值,而不是以没有好处的方式混合语言。我们将响应值设置为会话值并执行正常的 JS 条件console.log()