为什么通过 javascript 执行 php 有效?

Why does executing php via javascript work?

谁能解释一下这种情况下请求和响应周期的分步操作?是的,它确实有效(如果你有一个有效的 php 后端)。

for(var i=0; i<10; i++){
    var test = "<?php echo 'test'; ?>";
    console.log(test);
}

不要模仿 AJAX 的维基百科定义或 php 是服务器端而 javascript 是客户端,我知道这些事情。

我的问题是,在这种情况下,我无法思考哪个先出现。我的想法是先执行 js,然后向服务器发送请求,但这基本上不是 AJAX 吗?如果 js 没有首先执行,服务器怎么可能知道执行 php(即 echo "test")而不是只提供 php 标签的纯文本版本?

您从服务器请求一个 .php 文件,然后服务器对其进行解析并呈现以提供给客户端。在渲染过程中,echo 正在输出一个字符串,因此 var test = "<?php echo 'test'; ?>"; 在输出中变为 var test ="test"。浏览器解释输出 (html) 并在该点执行任何 javascript。您给出的场景中没有 Ajax,这就是您可能感到困惑的原因。

第 1 步 PHP 准备要由浏览器解析的页面。发送到您浏览器的实际源代码是:

var test = "test";
alert(test);

您应该能够在生成的页面上查看源代码并看到这个。您不是在进行服务器端调用,您只是通过 PHP

将文本加载到浏览器页面

尝试将其视为图层。我相信您知道服务器上的 php 运行 和客户端上的 javascript。这就是我认为的流程

  • 正在呈现的页面必须来自某个地方,在这种情况下它是服务器,幸运的是这也是执行 php 的地方所以所有 php 代码之前都有 运行被发送到服务器。即:即使是回显代码
  • echo 测试已经 运行 在服务器中并且字符串 'test' 已经在一个相当幸运的地方生成 - 在 javascript 变量声明中。
  • 所以我们可以看到,服务器只是发送 "var test = 'test'" 并没有做任何事情 javascript 所以 'var' 对服务器来说并不重要
  • 当它从服务器到达浏览器时,这实际上是有意义的并被执行!

因此,对于服务器,'var test = ' 只是字符串 'var test = "test";',而对于浏览器中的 Javascript,这意味着变量 test 包含一个字符串 'test'

编辑:如果用于从服务器发送的页面的for循环中,当页面到达浏览器时,无论回显php脚本出现在哪里,已经有回显字符串

我会尽量简单地说。您知道 PHP 是服务器端,JS 是客户端,您在这方面是正确的。

PHP 作为一种语言 运行s 无论它做什么来生成 HTML 要推送到客户端(浏览器)的内容。所以当你 运行 你的 javascript:

for(var i=0; i<10; i++){
    var test = "<?php echo 'test'; ?>";
    console.log(test);
}

PHP 在 javascript 知道它完成任何事情之前被评估。基本上让你的小脚本看起来像这样:

for(var i=0; i<10; i++){
    var test = "test";
    console.log(test);
}

您上面的脚本中没有 ajax。