想要改进这篇文章? 提供这个问题的详细答案,包括引文和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。
我在 PHP 中有一个变量,我需要它在我的 JavaScript 代码中的值。如何将我的变量从 PHP 获取到 JavaScript?
我的代码如下所示:
<?php $val = $myService->getValue(); // Makes an API and database call
在同一页面上,我的 JavaScript 代码需要将$val变量的值作为参数传递:
$val
<script> myPlugin.start($val); // I tried this, but it didn't work <?php myPlugin.start($val); ?> // This didn't work either myPlugin.start(<?=$val?>); // This works sometimes, but sometimes it fails </script>
实际上有几种方法可以做到这一点。有些需要比其他更多的开销,有些被认为比其他更好。
没有特别的顺序:
在这篇文章中,我们将检查上述每种方法,并了解每种方法的优缺点,以及如何实现它们。
这种方法被认为是最好的,因为 您的服务器端和客户端脚本是完全分开的 。
使用 AJAX,您需要两个页面,一个是 PHP 生成输出的地方,第二个是 JavaScript 获取该输出的地方:
/* Do some operation here, like talk to the database, the file-session * The world beyond, limbo, the city of shimmers, and Canada. * * AJAX generally uses strings, but you can output JSON, HTML and XML as well. * It all depends on the Content-type header that you send with your AJAX * request. */ echo json_encode(42); // In the end, you need to **echo** the result. // All data should be _json_encode()_ d. // You can json_encode() any value in PHP, arrays, strings, //even objects.
<!-- snip --> <script> function reqListener () { console.log(this.responseText); } var oReq = new XMLHttpRequest(); // New request object oReq.onload = function() { // This is where you handle what to do with the response. // The actual data is found on this.responseText alert(this.responseText); // Will alert: 42 }; oReq.open("get", "get-data.php", true); // ^ Don't block the rest of the execution. // Don't wait until the request finishes to // continue. oReq.send(); </script> <!-- snip -->
42当文件完成加载时,上述两个文件的组合会发出警报。
42
这种方法不如 AJAX 可取,但它仍然有其优点。从某种意义上说,PHP 和 JavaScript 之间仍然是 相对分离的,因为 JavaScript 中没有直接的 PHP。
<input type=hidden>
inputNode.value
<meta>
data-*
有了这个,想法是创建某种不会向用户显示但对 JavaScript 可见的元素。
<!-- snip --> <div id="dom-target" style="display: none;"> <?php $output = "42"; // Again, do some operation, get the output. echo htmlspecialchars($output); /* You have to escape because the result will not be valid HTML otherwise. */ ?> </div> <script> var div = document.getElementById("dom-target"); var myData = div.textContent; </script> <!-- snip -->
这可能是最容易理解的。
实现相对简单:
<!-- snip --> <script> var data = <?php echo json_encode("42", JSON_HEX_TAG); ?>; // Don't forget the extra semicolon! </script> <!-- snip -->
祝你好运!