在php标签中包含javascript变量

3

i have javascript as below

 html="<th>"+<?php echo __(); ?>+"</th>";

我想在to __()函数中添加另一个JavaScript变量,就像这样。
<?php echo __(<js varible>); ?>

我尝试过

var myvarible=200;
html="<th>"+<?php echo __("'"+myvarible+"'"); ?>+"</th>";
console.log(html);

对我没有用

请问有谁能帮助我吗? 谢谢。


echo __() 是 Symfony 本地化函数,必须使用它。 - Roshan Wijesena
也许你应该更好地解释一下你想要实现什么。通常当你到达需要混合使用JS和PHP的点时,一个大红色警报灯应该开始闪烁,你应该开始重新考虑你的策略。 - nico
你能否发布你实际使用的代码?也许这将有助于更好地理解你试图实现什么以及你所采用的方法。 - Mahendra Liya
6个回答

3
你对服务器端和客户端代码的工作方式存在误解。
你想要做的事情(将PHP本地化函数应用于Javascript变量)唯一可行的方法是这样的(此代码假定你正在使用JQuery,但也可以在没有它的情况下完成):
var myvariable = 'hello';
$.get('http://yoursite.com/localize.php?text='+myvariable, function(localizedText) {
  html = "<th>"+localizedText+"</th>";
  console.log(html);
});

然后,localize.php应该像这样:

<?php
include('you localization library');
echo __($_GET['text']);
?>

解释:当您的客户端代码(JavaScript)在浏览器中执行时,它将调用一个URL,该URL将在服务器上执行您的服务器端代码(您的PHP __()函数),然后将值返回给客户端代码。

1
var myvarible=200;
html="<th>"+<?php echo __("'"+myvarible+"'"); ?>+"</th>";
console.log(html);

这会尝试将 PHP 变量 "myvariable" 放入脚本标记中,你想要的更接近于:

var myvarible=200;
html="<th>"+"<?php echo __("'myvarible'"); ?>"+"</th>";
console.log(html);

然而,在这种情况下,为什么不完全跳过PHP呢?

var myvarible=200;
html="<th>" + myvarible + "</th>";
console.log(html);

我不能跳过它,__echo()是Symfony中的本地化函数。 - Roshan Wijesena
在这种情况下,正在本地化什么?正如其他地方指出的那样,JS无法看到/使用PHP本地化,而PHP也无法看到/本地化JS变量。 - Jim Deville
你为什么要尝试本地化一个整数? - prodigitalson
@Roshan:啊,只要你不需要从JS中的其他函数动态确定变量,那么我的示例就可以了。但是,如果你需要从JS端发生的某种操作设置myvariable,那么你就没那么幸运了 :-) - prodigitalson

1
var myvariable='<?php echo __("200"); ?>';
html="<th>"+myvariable+"</th>";
console.log(html);

然而,这需要在一个正在被解释的 .php 文件中才能运作 JavaScript。

楼主想在 PHP 调用中包含 JS 变量,这是不可能的,除非使用 AJAX。你会同意我的观点,像这样的代码只会带来大麻烦,应该尽量避免。

嗯,是和不是...我不会用这种方式。我使用一个助手,让我以一致的方式做这样的事情。在我的视图文件中我有类似这样的东西:

<?php js_call('jslib.myFunction(?,?)', __($value), 'some other value'); ?>

js_call 类似于使用 sprintf 或准备好的语句,但针对 js。参数通过 json_encode 运行,因此引号和其他内容是正确的。所有这些内容都存储在数组中,然后在布局中,在我的 </body> 之前调用:

<?php include_js_calls(); ?>

然后,它会获取我使用 js_call 进行的所有调用,并将字符串值输出到脚本标记中,从而产生类似以下内容的结果:

<script type="text/javascript">
  jslib.myFunction('first value', 'some other value');
</script> 

Apostrophe Cms借鉴了这个精彩的想法


这不会执行PHP语句。 - nico
如果它在一个脚本标签内的 PHP 文件中,那么它就会生效... 在我看来,这是对 OP 发布内容的唯一合理解释 :-) 这与将 json_decode 的输出回显到头部的脚本标签中以配置一些 JS 相同,这些 JS 是从服务器上处理页面时创建的动态 PHP 变量生成的。 - prodigitalson
不会的,你把 <? 标签放在一个仅在客户端解析的 JS 字符串中。 - nico
返回的结果将是 var myvariable = 'PHP函数的结果';,如果他试图使用在JS中定义的变量,你的语句是正确的,但是我在服务器端将 200 作为字符串传递给了PHP函数。 - prodigitalson
好的,我有点草率了,它可能实际上是被解释的,但你仍然在硬编码200,OP想要在PHP调用中包含一个JS变量,这是不可能的,除非你使用AJAX。而且你会同意我的看法,像这样的代码只会带来很大的麻烦,应该尽量避免。 - nico
但是在他的示例中,他已经在上一行中硬编码了变量...这就是为什么我说这是唯一合理的解释。在我看来。 - prodigitalson

1
Javascript运行在客户端,而PHP运行在服务器端。 所以var myvariable=200; 仅在客户端执行。
但是myvariable将在服务器端执行时无效。

1

PHP在服务器上执行,JS在客户端上执行。你不能期望PHP解析JS,事实上PHP永远不会看到JS语句,因为它们只有在服务器处理PHP后才会被处理。


1

在JavaScript中进行本地化(出于任何原因),显然不能直接调用echo __()。

有不同的可能策略

  • 在页面加载时,在JavaScript中包含本地化字符串表。需要时进行查找。此表可以使用echo __()在服务器端生成,然后缓存。
  • 为服务器本地化数据进行ajax请求。可能不适合频繁更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接