我有以下代码:
<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>
var baz = <?php echo 42; ?>;
alert(baz);
</script>
为什么这不将“ bar”写入我的文本文件,而是发出“ 42”警报?
注意:此问题的早期修订版本明确涉及服务器上的PHP和客户端上的JavaScript。当一种语言在客户端上运行而另一种语言在服务器上运行时,问题和解决方案的本质对于任何一对语言都是相同的(即使它们是相同的语言)。当您看到有关特定语言的答案时,请考虑到这一点。
Your code is split into two entirely separate parts, the server side and the client side.
|
---------->
HTTP request
|
+--------------+ | +--------------+
| | | | |
| browser | | | web server |
| (JavaScript) | | | (PHP etc.) |
| | | | |
+--------------+ | +--------------+
|
client side | server side
|
<----------
HTML, CSS, JavaScript
|
The two sides communicate via HTTP requests and responses. PHP is executed on the server and outputs some HTML and maybe JavaScript code which is sent as response to the client where the HTML is interpreted and the JavaScript is executed. Once PHP has finished outputting the response, the script ends and nothing will happen on the server until a new HTTP request comes in.
The example code executes like this:
<script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>
var baz = <?php echo 42; ?>;
alert(baz);
</script>
Step 1, PHP executes all code between <?php ?>
tags. The result is this:
<script type="text/javascript">
var foo = 'bar';
var baz = 42;
alert(baz);
</script>
该file_put_contents
呼叫并没有导致任何东西,它只是写了“+富+”到文件中。该<?php echo 42; ?>
调用导致输出“ 42”,该输出现在位于该代码以前所在的位置。
现在,此生成的HTML / JavaScript代码将发送到客户端,并在客户端进行评估。该alert
调用有效,而该foo
变量未在任何地方使用。
在客户端甚至开始执行任何JavaScript之前,所有PHP代码都在服务器上执行。JavaScript可以与之交互的响应中没有剩下PHP代码。
要调用一些PHP代码,客户端将必须向服务器发送新的HTTP请求。使用三种可能的方法之一可以发生这种情况:
您还可以使用JavaScript来window.location
模拟或可能性1.和2. ,使浏览器使用或提交表单来打开新页面。
您也可以
window.open
使用iframe 打开第二页或使用iframe加载页面。将WebSockets添加到通信方法列表中可能是值得的。
如果说下拉值通过jquery更新怎么办。当用户执行步骤2时。通过“提交”按钮将表单提交到服务器并加载新页面的表单提交,是否可以将jQuery更新的值传递给php中的控制器?还是因为通过jquery将它添加到dom中,所以它们对php不可见?@deceze
@Fabricio将根据
<form>
数据创建一个HTTP请求并将其发送到服务器。您可以使用Javascript处理表单,使它们包含不同的数据。是的,如果提交时该数据正确属于表单,则该数据将成为结果HTTP请求的一部分;不管它是原始HTML还是随后通过Javascript添加。