Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP变量传递到Javascript中会返回NULL_Javascript_Php_Json - Fatal编程技术网

将PHP变量传递到Javascript中会返回NULL

将PHP变量传递到Javascript中会返回NULL,javascript,php,json,Javascript,Php,Json,我知道有很多问题都涉及到类似的东西,但我尝试了答案却没有任何运气 PHP代码片段: Javascript代码片段: 我遇到的最常见的答案是对我的变量进行UTF_编码,我认为这是正确的。我也试过: var userIDnum = <?php echo $userIDnum; ?>; 这不管用 在脚本之外的HTML中 <?php echo json_encode($userIDnum); ?> 用引号返回90 <?php echo $userIDnum; ?>

我知道有很多问题都涉及到类似的东西,但我尝试了答案却没有任何运气

PHP代码片段:

Javascript代码片段:

我遇到的最常见的答案是对我的变量进行UTF_编码,我认为这是正确的。我也试过:

var userIDnum = <?php echo $userIDnum; ?>;
这不管用

在脚本之外的HTML中

<?php echo json_encode($userIDnum); ?>
用引号返回90

<?php echo $userIDnum; ?>
返回不带引号的90

在脚本中,我分别得到null和no警报框

关于为什么不将变量传递到脚本中,有什么想法吗?谢谢


编辑:尝试使用引号并得到相同的结果

有两件事需要检查。假设这是您的脚本:

<?php $htmlString= 'testing'; //Lets say this is a snippet of your php 
?>
<html>
  <body>
    <script type="text/javascript"><!-- And this is the snippet of your JS -->
      // notice the quotes around the ?php tag         
      var htmlString="<?php echo $htmlString; ?>"; //Make sure there's double 
                                                   //quotes around your php
      alert(htmlString);
    </script>
  </body>
</html>
确保在名为.PHP的文件中包含PHP和JS。如果它是一个外部的.js文件,那么它里面的php将不起作用。如果您这样设置的话,可以将js文件重命名为.php扩展名

还要确保您已经按照上面的方式设置了html、php和js。php必须有双引号,例如:

var userIDnum = <?php echo json_encode($userIDnum); ?>;
将此更改为以下内容:

[根据要求摘自评论]


如果我可以提出建议,请将您的值放入HTML中的数据属性中,例如基于calamari建议的解决方案:

在HTML中:

<!DOCTYPE html>
<!--[if lt IE 11 ]> <html class="ie10orless"> <![endif]-->
<head>
... more code here ...

希望这对其他人有帮助。谢谢大家的其他建议。

这是否在.js文件中?如果是这样,它不会被php脚本周围的PHPPut双引号解析->;如果问题是变量没有定义,它会提醒未定义。因此,如果您根本没有收到任何警报,则不会调用click函数,或者您遇到了一个JS控制台错误,禁止进一步执行。您是否在代码行中插入了一个断点并查看它是否被命中?PHP在代码中打印了什么?也就是说,什么被替换为?@bizco,无论PHP输出90还是90,它都是有效的JS。你的错误可能在别的地方。例如,您的0 selector.click可能未被触发,或者您有一个控制台错误,您没有告诉我们。我们需要更多的信息。从您的页面获取生成的JS源代码,如果可以的话,将其粘贴到JSFIDLE中,这样人们可以更好地帮助您。如果不看到生成的源代码或没有错误消息,就无法继续。json_encode已返回有效的JavaScript,因此无需在输出周围加引号。它甚至适用于严格意义上不是JSON的东西,如字符串或数字。如果是数字,则不需要字符串,如果是字符串,则需要在其周围加引号。我最担心的是,如果js和php在一个.php文件中,它会工作,因为php不会在一个.js文件中执行。json_encode已经引用了字符串。如果在输出周围加上引号,则会得到var userIDnum=123,这是无效的JS。不管是什么情况,json_encode都会破坏JS中的警报。在本例中,json_encode与是否在字符串周围加双引号无关,这会导致问题。我知道警报不起作用,但肯定不是json_encode的错误。JS位于PHP引擎无法获取的外部文件中,例如,因为它的扩展名错误,或者没有正确链接。我敢肯定,只要看一下浏览器控制台就会找到原因。谢谢你,卡拉马里。你的回答使我找到了解决办法。非常感谢。我发布了我在一个单独的答案中用于格式化的代码。
var userIDnum = <?php echo json_encode($userIDnum); ?>;
var userIDnum = "<?php echo json_encode($userIDnum); ?>";
domObject.getAttribute('data-user-id').
<!DOCTYPE html>
<!--[if lt IE 11 ]> <html class="ie10orless"> <![endif]-->
<head>
... more code here ...
    if (oldIE) {
        var x = document.getElementsByTagName("div")[0].getAttribute("data-number"); 
        alert("in IE");
        alert(x);
    } else {
        var userinfo = document.querySelector('#user');
        alert("NOT in IE");
        alert(userinfo.dataset.number);
    }