php - 为什么 javascript 不能使用我在 php 文件中声明的 javascript 变量?

标签 php javascript variables

大家好,这个问题困扰了我大约一周,情况如下:

我有一个使用 GoDaddy 托管的网站。本期中使用的三个文件是 index.html 、 milktruck.js 和 xml_http_request.php 都托管在同一目录中。

index.html 文件使用以下代码引用 milktruck.js 文件:

 <script type="text/javascript" src="milktruck.js"></script> 

milktruck.js 文件会在站点打开时自动触发。此时 xml_http_request.php 尚未触发。

在 2000 年的第 79 行,我将变量“simple”传递给 milktruck.js 文件中的函数:

 placem('p2','pp2', simple, window['lla0_2'],window['lla1_2'],window['lla2_2']);

“simple”从未在 milktruck.js 文件中初始化。相反,我在 xml_http_request.php 文件中包含了以下代码行:

 echo "<script> var simple = 'string o text'; </script>";

此时我还没有对 milktruck.js 文件中的 xml_http_request.php 文件进行任何引用。直到 milktruck.js 文件的第 661 行使用以下代码行,我才引用该文件:

 xmlhttp.open('GET',"xml_http_request.php?pid="+pid+"&unLoader=true", false);

一切都编译(我假设是因为我的游戏运行),但是 placem 函数没有正常运行,因为字符串 'string o text' 从未出现。

如果我在 php 文件中注释掉初始化“simple”的代码行,并在我调用函数 placem 之前包含以下代码行,一切正常,文本显示:

 var simple = 'string o text';

您认为问题出在哪里?在尝试使用 javascript 文件中的“简单”变量之前,是否需要调用 php 文件?我该怎么做?还是我的代码有问题?

最佳答案

So, we meet again!

埋在问题评论里的是the link to the actual Javascript file .它有 2,200 行,73kb,而且格式很糟糕。也是derived from a demo for the 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; ?>";

这从来没有奏效的原因是,如果没有在您的服务器上进行一些奇怪的配置更改,PHP 不会处理具有 .js 扩展名的文件。在共享主机上,你将无法做到这一点。相反,您可以使用 .php 扩展名重命名该文件。这将允许 PHP 处理该文件,并允许您输入的命令实际工作。

您需要对文件再做一项更改。在最顶层,非常非常顶层,首先,您需要以下行:

<?php header('Content-Type: text/javascript'); ?>

此命令将告诉浏览器返回的文件是 Javascript。这是必需的,因为 PHP 通常输出 HTML,而不是 Javascript。如果脚本未被识别为 Javascript,某些浏览器将无法识别该脚本。

现在我们已经解决了这个问题......

Instead I've included the following line of code in the xml_http_request.php file: <a script tag>

这不太可能奏效。如果它确实起作用,那可能是偶然的。我们在这里处理的不是普通 ajax 库。我们正在处理 some wacky thing created by the Google Earth folks很久很久以前。

除了整个整体代码块中的一两个之外,没有 实际处理结果的 ajax 请求。这意味着脚本标签不太可能被处理。此外, 处理结果的一两个实际上将其视为 XML 并返回一个文档。也不太可能在那里处理脚本标记。

这将解释为什么变量永远不会在 Javascript 中可靠地显示。

如果您需要从 ajax 调用中返回可执行代码,并且可靠地返回,您将需要采用成熟的、经过良好测试的 Javascript 库,例如 jQuery .别担心,如果您真的愿意,可以混合搭配现有代码和 jQuery。 There's an API call just to load additional scripts .如果您只想返回数据,这就是 JSON 的用途。你可以有 PHP code emit JSON并且有jQuery fetch it .这比你目前的不幸困惑要快得多、容易得多、方便得多。

哦,还有get Firebug或使用 Chrome/Safari 的开发工具,它们将为您节省大量的 Javascript 痛苦。

然而...

我要非常坦率地说。这是糟糕的代码。这是可怕的代码。它的格式很糟糕,评论是个笑话,大约有一点七 十亿 个全局变量。代码吓到我了这让我很害怕。如果用 10 英尺的杆子触摸它,我会犹豫。

我不希望在我最大的敌人身上维护这段代码,而你在这里,试图用它做一些奇怪的事情。

我衷心鼓励您在返回此项目之前,先在一个不像这个代码库那样陈旧和迟钝的代码库上磨练您的技能。保存您的理智,在您还可以的时候离开!

关于php - 为什么 javascript 不能使用我在 php 文件中声明的 javascript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526816/

相关文章:

javascript - 使用 Python 提交 Javascript 表单和抓取

R 表达式变量列表

string - 如何使用 OutputDebugString 打印字符串变量中的消息?

php - SQLSTATE[HY093] : pdo statement during insert into mysql db

javascript - Angular limitTo 不返回正确的输出

javascript - 日期-fns RangeError : Invalid time value

javascript - 变量表现不佳 - 在 JavaScript 中 - 在函数中

php - CodeIgniter - 代码重复和将变量传递给函数

php - 如何检查用户名是否存在于表单中?

php - 在 PHP 中,我应该将 WHILE 与 mysql 结果还是数组一起使用?