将php返回值分配给javascript变量

时间:2014-04-22 16:14:08

标签: javascript php mysql

我在MySql表上有一个数据库表单,我有一个javascript函数来填充select标签的选项。这些选项是从状态为“活动”或“非活动”的客户端表中获取的,返回值是那些状态为活动状态的客户端。如果在客户端状态为非活动状态的情况下加载订单,我正在尝试为非活动客户端添加处理程序。表单从一个php脚本加载,该脚本将客户端表连接到主表,其中主表中的clientId等于客户端表中的Id。因此,无论状态如何,我都会在函数外部获取客户端的名称和ID以填充选项列表。

有一条线让我适应。我搜索了这个网站和其他人,并找到了很多解决方案,但到目前为止还没有一个对我有用。这是一行:

var txt = <?php echo $row[`clients`.'name']; ?> ;

Chrome和Firefox调试程序返回的内容是“未捕获的语法错误:意外的令牌&lt;”。调试器显示:var txt = <br />

我已经尝试用单引号,双引号和没有引号括起php脚本,但仍然没有运气。任何想法,任何人?

大约一小时后 - > 我找到了解决方法。我尝试了你的所有建议,但在这种情况下都没有。 var_dump和json_encode确认了我已经知道的,返回的数据是有效的。无论语法有何变化,它们都返回相同的错误。我所做的是应用与上面相同的语法,但是在隐藏的输入中:

<input type="text" id="cName" hidden value="<?php echo $row[`clients`.'name']?>" />

然后将javascript代码更改为:

 var txt = document.getElementById('cName').value;

其他一切都很完美。当然,我仍然对使用反引号有一些挥之不去的想法,并希望我有一个更好,更安全的代码。正如我在某处提到的,我只是直接从phpMyAdmin复制了sql语法。在这种情况下,如果我用反引号替换单引号,则输入不返回任何内容。好吧,谢谢大家。如果有人想要贡献更多,我会很高兴听到它。

5 个答案:

答案 0 :(得分:3)

这是非法的PHP语法,一般来说语法非常危险。尝试执行var_dump($row)以确切了解该数组中的内容。可能你想要更像

的东西
var txt = <?php echo json_encode($row['clients.name']); ?>;

代替。

请注意json_encode()的使用。这将 ENSURE ,无论你在JS代码块中吐出什么,实际上是语法上有效的javascript。

e.g。考虑如果你最终得到了

会发生什么
var txt = Miles O'Brien;
          ^^^^^--undefined variable;
                ^--- another undefined var
                 ^--- start of a string
                  ^^^^^^^---unterminated string.

使用json_encode(),最终得到

var txt = "Miles O'Brien";

,一切都很好。

答案 1 :(得分:0)

更改此

var txt = <?php echo $row['clients'.'name']; ?> ;

到此:

var txt = <?php echo $row['clients']['name']; ?> ;

答案 2 :(得分:0)

var txt = "<?php echo $row['clients']['name']; ?>";

答案 3 :(得分:0)

var txt = <?php echo $row[`clients`.'name']; ?> ;

考虑PHP如何解析这个:

  1. var txt =将直接输出到客户端。

  2. 进入PHP模式。

  3. echo以下表达式。

  4. 评估$row[`clients`.'name']

    • 首先我们需要确定数组索引,它是`clients`'name'的串联。

    • PHP中的反引号是execution operator,与shell_exec()相同。所以PHP尝试执行shell命令clients,这可能会失败,因为这不是你想要的,也不存在。因此,在此阶段,PHP会输出HTML错误消息,从换行符<br />开始。

    • 您的客户端现在有var txt = <br />(您可以通过检查返回到浏览器的页面的HTML源来验证这一点),它会尝试在其JavaScript上下文中进行评估。这会导致您目睹的“意外令牌”错误。

  5. 正如其他人所提到的,你可能想要做一些像$row['clients']['name']$row['clients.name']这样的事情 - 但是如果没有看到PHP的其余内容,就无法确定。另外,作为@MarcB has observed,您需要确定结果输出是有效的JavaScript,并且可能希望使用类似json_encode()的函数来适当地转义值。

答案 4 :(得分:0)

错误来自于您的返回值(javascript中的字符串)必须在引号中。

单引号将从字面上取得它们之间的任何内容,不会解释转义(如\ n),使用双引号。

var txt = "<?php echo $row['clients']['name']; ?>";

是你想要的