遇到一个貌似无法解决的问题:
<li>
<input type="button" value="Login" onClick="Login()" />
</li>
</ul>
</div>
<div>
<?php
$doc="<script>document.getElementById(\"main\");document.write(\"hello\");</script>";
echo $doc;
?>
</div>
在这种情况下 php代码总是先于 Login()函数运行。想通过 Login()函数获取用户输入的数据再传递给 php的梦想就这样破灭了。
如果能够让 js先于 php执行,上面的想法就可以成立,但是我推测网页实际上是这样得来的:(直到服务器开始处理用户请求之前的事,我还无法推测):
服务顺序读取本机上的 HTML文档,遇到 php代码段时,处理php,返回值写进文档中。遇到有 js代码段时,将代码随文档原样发送给用户;
终端接收到 HTML文档,逐行解析,(只会遇到 js代码),有 js代码出现时,处理之,返回值或是运行什么的,完全都是终端的事了。
因此,终端无法看到 FWQ上的 php代码。
FWQ无法预见 js在终端上的处理结果。
检验上述推测的正误:
1.
<?php
$ar="Still in Develop...";
?>
<script type="text/javascript">
var ar="<?php echo $ar;?>";
gets();
</script>
function gets() { document.write(ar); }
Still in Develop...
用Google浏览器审查元素:
<script type="text/javascript"> | |
var ar="Still in Develop..."; | |
gets(); | |
</script>
|
如是,php代码是看不见的。因为它不会被发送到终端。而文档中 php代码之后的 $ar变量,均被替换为它的值:"Still in develop..."
这就是为什么 FWQ上的 var ar="<?php echo $ar;?>";在终端上却为var ar="Still in Develop...";的原因。
2.
<?php
$ar="Still in Develop...";
?>
<script type="text/javascript">
gets();
</script>
function gets() { var ar="<?php echo $ar;?>"; document.write(ar); }
刷新页面后出错:
function gets() | |
{ | |
document.write(ar);
![]() | |
} |
同时标签页上的圆弧线始终在逆时针旋转,表明一直处在刷新页面的“第一阶段”(Google浏览器中,刷新页面总是有两个动作,相应地,圆弧线分别逆时针慢旋和顺时针快旋,至于这两个阶段分别对应什么,我还不知道。)
如是,FWQ将 .js文件原样发送到终端,终端接收到文档,处理到gets()函数时,读取 .js文件中相应的语句,遇到 var ar="<?php echo $ar;?>";忽略掉(为什么?还不知道啊),于是在处理document.write(ar);时,就会报出 not defined的错。
3.
<?php
$ar="Still in Develop...";
?>
<script type="text/javascript">
function gets()
{
var ar="<?php echo $ar;?>";
document.write(ar);
}
gets();
</script>
Still in Develop...
Google浏览器审查magellan.php:
<script type="text/javascript"> | |
function gets() | |
{ | |
var ar="Still in Develop..."; | |
document.write(ar); | |
} | |
gets(); | |
</script> |
这次, gets()的定义被FWQ扫视的时候,发现里面的 <?php echo $ar;?>字样,处理后返回Still in Develop...于是该行定义被成功解析。
如上,我得到结论:
FWQ仅处理终端要求的 .html/.php,其余的内容(.css/.js等)原样传给用户,服务器并不处理。
这样的话,又得想一个解决方案了。