如果我在 javascript ajax 中使用 php 进行会话内部条件,这是否正常?

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 吗?

ADy*_*son 5

您只能将 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 来读取该值并决定做什么。


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

  • 谢谢@ADyson,我无法解释,我在评论中给出了例子+1 (2认同)

tre*_*ake 5

你应该把代码分开:

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()