use*_*891 1 javascript php variables
嘿大家,这个问题让我在上周左右难过了,情况如下:
我有一个使用GoDaddy托管托管的网站.本期中使用的三个文件是index.html,milktruck.js和xml_http_request.php,它们都托管在同一目录中.
index.html文件使用以下代码引用milktruck.js文件:
<script type="text/javascript" src="milktruck.js"></script>
Run Code Online (Sandbox Code Playgroud)
打开站点时,milktruck.js文件会自动触发.此时xml_http_request.php尚未触发.
在2000年的第79行,我将变量"simple"传递给milktruck.js文件中的函数:
placem('p2','pp2', simple, window['lla0_2'],window['lla1_2'],window['lla2_2']);
Run Code Online (Sandbox Code Playgroud)
"simple"从未在milktruck.js文件中初始化.相反,我在xml_http_request.php文件中包含以下代码行:
echo "<script> var simple = 'string o text'; </script>";
Run Code Online (Sandbox Code Playgroud)
此时我还没有对milktruck.js文件中的xml_http_request.php文件做任何引用.我没有引用该文件,直到milktruck.js文件的第661行,并带有以下代码行:
xmlhttp.open('GET',"xml_http_request.php?pid="+pid+"&unLoader=true", false);
Run Code Online (Sandbox Code Playgroud)
一切都编译(我假设因为我的游戏运行),但是placem函数运行不正常,因为字符串'string o text'永远不会出现.
如果我要在php文件中注释出初始化"简单"的代码行,并在我调用函数placem之前包含以下代码行,那么一切正常并且文本显示出来:
var simple = 'string o text';
Run Code Online (Sandbox Code Playgroud)
你觉得这个问题在哪里?在尝试使用javascript文件中的"简单"变量之前,是否需要调用php文件?我该怎么办?或者我的代码有问题吗?
埋在问题评论中的是指向实际Javascript文件的链接.这是2,200行,73kb,格式不佳.它也来自Google Earth API的演示.
正如本文和之前的问题中的评论所述,您可能会对PHP如何工作以及PHP如何与Javascript交互产生根本性的误解.
我们来看看milktruck.js的第62-67行:
//experiment with php and javascript interaction
//'<?php $simpleString = "i hope this works"; ?>'
//var simple = "<?php echo $simpleString; ?>";
Run Code Online (Sandbox Code Playgroud)
这从来没有奏效的原因是因为没有在服务器上进行一些奇怪的配置更改,PHP不会处理扩展名为.js的文件.在共享主机上,您将无法做到这一点.相反,您可以使用.php扩展名重命名该文件.这将允许PHP处理文件,并允许您输入的命令实际工作.
您需要对文件进行一次更改.在最顶端,非常顶部,在其他任何事情之前,您将需要以下行:
<?php header('Content-Type: text/javascript'); ?>
Run Code Online (Sandbox Code Playgroud)
此命令将告诉浏览器返回的文件是Javascript.这是必需的,因为PHP通常输出HTML,而不是Javascript.如果脚本未被识别为Javascript,则某些浏览器将无法识别该脚本.
现在我们已经解决了这个问题......
相反,我在xml_http_request.php文件中包含以下代码行:<a script tag>
这不太可行.如果它确实有效,那可能是偶然的.我们这里没有处理普通的 ajax库.我们正在处理很久很久以前谷歌地球人员创造的一些古怪的事情.
除了整个单片代码块中的一个或两个之外,没有实际处理结果的 ajax请求.这意味着脚本标记不太可能被处理.此外,该一个或两个都处理结果居然把它当作XML并返回一个文档.脚本标签也不太可能在那里处理.
这将解释为什么变量永远不会在Javascript中可靠地显示出来.
如果你需要从ajax调用中返回可执行代码,并且可靠地执行,那么你将需要采用一个成熟的,经过良好测试的Javascript库,比如jQuery.别担心,如果你真的想要,你可以混合和匹配现有的代码和jQuery. 有一个API调用只是为了加载其他脚本.如果您只想返回数据,那就是JSON的用途.你可以让PHP代码发出JSON并让jQuery获取它.这比你目前不幸的混乱更快,更容易,更方便.
哦,并获得Firebug或使用Chrome/Safari的开发工具,它们将为您节省大量的Javascript痛苦.
然而...
我会在这里非常坦诚.这是糟糕的代码.这是可怕的代码.它的格式很差,评论是一个笑话,大约有七十亿个全局变量.代码吓到我了.这让我很害怕.我会犹豫用十英尺的杆子碰它.
我不希望在我最大的敌人身上维护这段代码,而你在这里,试图用它做一些奇怪的事情.
我衷心鼓励你在返回这个项目之前,在比这个更古老和迟钝的代码库上磨练你的技能. 保持理智,在你还可以的时候离开!