首页 > 解决方案 > 这正常吗,如果我在 javascript ajax 中使用 php 进行会话内部条件?

问题描述

我有一个使用 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 } ?>
  }
})

我可以在 ajax 代码中使用会话吗?

标签: javascriptphpcodeigniter

解决方案


您只能使用 PHP 变量(例如 Session)作为您作为硬编码值嵌入到代码中的东西,例如,如果您编写,则创建一个 JS 变量,该变量在脚本启动时具有 Session 值的值。假设该示例中的 Session 值为“hello”,那么在浏览器接收并执行的最终 JavaScript 中,您将看到以下行:作为硬编码片段。var x = '<?php echo $_SESSION["x"]; ?>';xvar x = "hello";

这是因为 PHP 在服务器上执行,并在 PHP 停止执行后生成 HTML 和 JS,然后将其发送到浏览器。

不能做的只是像你在示例中所做的那样在 JavaScript 中内联编写 PHP,并期望它做任何事情。该 PHP 将在您的 JavaScript之前执行,并且 PHP 的结果/输出(如果有的话)将嵌入到 JavaScript 中(或用于准确控制生成什么 JavaScript 并将其发送到浏览器)。


如果在执行 JavaScript 代码的过程中需要与服务器交互,但没有回传整个页面,则需要发出 AJAX 请求,因此它会向服务器生成一个新的 HTTP 请求,服务器可以执行 PHP 脚本并然后将响应返回给 JavaScript 进行处理。

在您问题的具体示例中,由于您已经发出 AJAX 请求,它可以将数据从 PHP 返回到 JavaScript,我建议您只需在响应数据中包含所需的 Session 值,然后编写一些 JavaScript 来读取该值并决定做什么。


进一步阅读:客户端和服务器端编程有什么区别?


推荐阅读