从PHP传递时未定义Javascript值

从PHP传递时未定义Javascript值,php,javascript,undefined,Php,Javascript,Undefined,更新:感谢所有帮助过我们的人。我希望这里的无数解决方案能够为任何面临类似困难的人提供参考 我正在用PHP读取一个文本文件,我需要将字符串传递到JS中进行操作。我尝试了更直接的方法将PHP放入外部JS文件中,但是没有成功,所以我使用了一个空的div容器。然而,在JS中,我仍然得到一个未定义的值。该文件正确读取div值,但不会传递到外部javascript文件 HTML: 如果有一种方法可以让在外部javascript文件中从PHP中提取变量起作用,我更愿意这样做 对div使用value属性是没有意

更新:感谢所有帮助过我们的人。我希望这里的无数解决方案能够为任何面临类似困难的人提供参考

我正在用PHP读取一个文本文件,我需要将字符串传递到JS中进行操作。我尝试了更直接的方法将PHP放入外部JS文件中,但是没有成功,所以我使用了一个空的div容器。然而,在JS中,我仍然得到一个未定义的值。该文件正确读取div值,但不会传递到外部javascript文件

HTML:


如果有一种方法可以让在外部javascript文件中从PHP中提取变量起作用,我更愿意这样做

对div使用value属性是没有意义的。使用隐藏的textarea元素代替div,并使用以下方法将文件内容放入其中:

<textarea id="fileContent" style="display:none"><?php echo $world; ?></textarea> 

将返回文本区域内容

将value属性设置为div没有意义。请使用隐藏的textarea元素,而不是div,并使用类似以下内容将文件内容放入其中:

<textarea id="fileContent" style="display:none"><?php echo $world; ?></textarea> 

将返回文本区域内容

对此我不确定,但可能是2个
$world
变量在不同的范围内。尝试:

<html>

    <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript" src="js/game.js"></script>
    </head>

    <body onload="init()">
        <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas>
        <br />
        <h1> Currently in development.</h1>
        <br />
        <div id="world" value="<?php echo file_get_contents('http://url.com/testworld.txt'); ?>" />
    </body>

</html>


目前正在开发中。

我不确定这一点,但可能是2
$world
变量在不同的范围内。尝试:

<html>

    <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript" src="js/game.js"></script>
    </head>

    <body onload="init()">
        <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas>
        <br />
        <h1> Currently in development.</h1>
        <br />
        <div id="world" value="<?php echo file_get_contents('http://url.com/testworld.txt'); ?>" />
    </body>

</html>


目前正在开发中。
尝试更改:

<div id="world" value="<?php echo $world; ?>" />
致:

如果需要,可以添加
display:none的样式到div以隐藏它。

尝试更改:

<div id="world" value="<?php echo $world; ?>" />
致:


如果需要,可以添加
display:none的样式
到div以隐藏它。

value
对DOM元素有特殊意义(它指的是文本框等的值)。相反,您可以使用诸如
数据值
,然后使用
document.getElementById('world').getAttribute('data-value')检查它

但是,更好的方法是使用隐藏的输入,例如

<input type="hidden" id="world" value="<?php echo $world; ?>" />

value
对DOM元素有特殊意义(它指文本框等的值)。相反,您可以使用诸如
数据值
,然后使用
document.getElementById('world').getAttribute('data-value')检查它

但是,更好的方法是使用隐藏的输入,例如

<input type="hidden" id="world" value="<?php echo $world; ?>" />

您应该在隐藏的输入字段中指定该值,而不是在div标记中指定该值。这是一种更好的方法
这样地


您应该在隐藏的输入字段中指定该值,而不是在div标记中指定该值。这是一种更好的方法 这样地


从PHP->JS传递数据非常容易,无需将数据隐藏在DOM中。 诀窍是json_encode()函数——它将php字符串、数组等转换为有效的javascript格式。 请参见下面的示例,已修复:

<?php
    $world = file_get_contents('http://url.com/testworld.txt');
?>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="js/game.js"></script>
</head>
<body onload="init()">
    <script type="text/javascript">
        //World is defined here, and accessible to the javascript that runs on the page
        var world = <?=json_encode($world)?>;
    </script>
    <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas>
    <br />
    <h1> Currently in development.</h1>
    <br />
</body>

那么您就不必担心太多的范围问题了?

从PHP->JS传递数据非常容易,而无需将数据隐藏在DOM中。 诀窍是json_encode()函数——它将php字符串、数组等转换为有效的javascript格式。 请参见下面的示例,已修复:

<?php
    $world = file_get_contents('http://url.com/testworld.txt');
?>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="js/game.js"></script>
</head>
<body onload="init()">
    <script type="text/javascript">
        //World is defined here, and accessible to the javascript that runs on the page
        var world = <?=json_encode($world)?>;
    </script>
    <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas>
    <br />
    <h1> Currently in development.</h1>
    <br />
</body>
那么你就不必太担心范围界定了?

另一种方式: 在php中

<div id="world" data-world="<?php echo $world; ?>" />
另外,您可能需要确保$world的值被正确转义,以用作html属性

另一种方式: 在php中

<div id="world" data-world="<?php echo $world; ?>" />

另外,您可能希望确保$world的值被正确转义,以用作html属性

,因此我尝试使用隐藏输入和文本区域。我仍然在定义JS变量的行中遇到Chrome控制台错误“无法读取null的属性'value'(或'innerHTML')”。这太奇怪了。请包括浏览器看到的HTML,请包括相关的JAVASCRIPT:-)错误是由
someNullExpression引起的。innerHTML
,这不能是上面发布的代码的结果,因为没有
innerHTML
。我的意思是,当我尝试下面要求我从“value”更改为“innerHTML”的解决方案时,它将我的“innerHTML”设置为null。上面的代码就是一切。@ZachWulf当您更改为innerHTML时,您是否也更改了div标记?是的……对于所有这些解决方案,我已经更改了与元素对应的相应属性。我得到的最接近的是patbolo的HTML5解决方案,但在页面上它只是吐出“未定义”。这就好像我的JS文件中的变量完全不知道我的PHP文件在哪里,它必须从中提取。我仍然在定义JS变量的行中遇到Chrome控制台错误“无法读取null的属性'value'(或'innerHTML')”。这太奇怪了。请包括浏览器看到的HTML,请包括相关的JAVASCRIPT:-)错误是由
someNullExpression引起的。innerHTML
,这不能是上面发布的代码的结果,因为没有
innerHTML
。我的意思是,当我尝试下面要求我从“value”更改为“innerHTML”的解决方案时,它将我的“innerHTML”设置为null。上面的代码就是一切。@ZachWulf当您更改为innerHTML时,您是否也更改了div标记?是的……对于所有这些解决方案,我已经更改了与元素对应的相应属性。我得到的最接近的是patbolo的HTML5解决方案,但在页面上它只是吐出“未定义”。这几乎就像我的JS文件中的变量完全不知道我的PHP文件在哪里,它必须从中提取一样
var world = document.getElementById('world').innerHTML;
<?php
    $world = file_get_contents('http://url.com/testworld.txt');
?>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="js/game.js"></script>
</head>
<body onload="init()">
    <script type="text/javascript">
        //World is defined here, and accessible to the javascript that runs on the page
        var world = <?=json_encode($world)?>;
    </script>
    <canvas id="game" width="650" height="366" style="border: 2px solid black;"></canvas>
    <br />
    <h1> Currently in development.</h1>
    <br />
</body>
<?php
    $foo = "\"Hello world!\"";
?>
<html>
<head>
</head>
<body>
    <script type="text/javascript">
        var foo = <?=json_encode($foo)?>;
        alert("The value of foo is: " + foo);
    </script>
</body>
</html>
<script type="text/javascript">
    //Load the game world, and pass to the javascript lib
    var world = <?=json_encode($world)?>;
    loadWorld(world);
</script>
<div id="world" data-world="<?php echo $world; ?>" />
$('#world').attr('data-world');