实际上有几种方法可以做到这一点.有些需要比其他人更多的开销,有些被认为比其他人更好.
没有特定顺序:
- 使用Ajax从服务器获取所需的数据.
- 将数据回送到页面的某个地方,并使用JavaScript从DOM获取信息.
- 将数据直接 echo 到JavaScript.
在本文中,我们将研究上述每种方法,并了解每种方法的优缺点,以及如何实现它们.
1. Use AJAX to get the data you need from the server
这种方法被认为是最好的,因为your server side and client side scripts are completely separate.
专业人士
- 如果明天您不再使用php,并且想要转向servlet、睡觉API或其他服务,那么您不需要更改太多的JavaScript代码.
- More readable-JavaScript是JavaScript,PHP是PHP.在不混合这两种语言的情况下,您可以获得两种语言的可读性更好的代码.
- Allows for asynchronous data transfer-从PHP获取信息可能需要花费大量时间/资源.有时你只是不想等待信息,加载页面,让信息随时到达.
- Data is not directly found on the markup-这意味着您的标记没有任何附加数据,只有JavaScript可以看到它.
缺点
- Latency-AJAX创建一个HTTP请求,HTTP请求通过网络传输,并具有网络延迟.
- State-通过单独的HTTP请求获取的数据不会包含获取HTML文档的HTTP请求中的任何信息.您可能需要这些信息(例如,如果HTML文档是为了响应表单提交而生成的),如果需要,则必须以某种方式将其传递给其他人.如果你已经排除了在页面中嵌入数据的可能性(如果你正在使用这种技术,你就可以嵌入数据),那么这就限制了你使用cookie/会话,这些cookie/会话可能会受到竞争条件的影响.
实施示例
使用Ajax,您需要两个页面,一个是PHP生成输出的地方,另一个是JavaScript获取输出的地方:
获取数据.php
/* 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.
指数php(或实际页面的名称)
<!-- 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", "获取数据.php", true);
// ^ Don't block the rest of the execution.
// Don't wait until the request finishes to
// continue.
oReq.send();
</script>
<!-- snip -->
当文件加载完成时,上述两个文件的组合将向42
发出alert .
再来点阅读material
2. Echo the data into the page somewhere, and use JavaScript to get the information from the DOM
这种方法不如AJAX好,但它仍然有它的优点.从某种意义上说,PHP和JavaScript之间仍然有relatively个分隔,JavaScript中没有直接的PHP.
专业人士
- Fast-DOM操作通常很快,可以相对快速地存储和访问大量数据.
缺点
- Potentially Unsemantic Markup-通常情况下,你会使用某种类型的
<input type=hidden>
来存储信息,因为从inputNode.value
中获取信息更容易,但这样做意味着你的HTML中有一个无意义的元素.HTML有<meta>
个元素来表示文档的数据,HTML5为数据引入了data-*
个属性,这些属性专门用于使用JavaScript阅读,可以与特定元素关联.
- Dirties up the Source——PHP生成的数据直接输出到HTML源,这意味着你得到了一个更大、更不集中的HTML源.
- Harder to get structured data- struct 化数据必须是有效的HTML,否则您必须自己转义和转换字符串.
- Tightly couples PHP to your data logic-因为在演示中使用了PHP,所以不能将两者完全分开.
实施示例
这样做的目的是创建某种元素,这些元素不会显示给用户,但对JavaScript是可见的.
index.php
<!-- 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 -->
3. Echo the data directly to JavaScript
这可能是最容易理解的.
专业人士
- Very easily implemented--只需要很少的时间就可以实现和理解这一点.
- Does not dirty source-变量直接输出到JavaScript,因此DOM不受影响.
缺点
- Tightly couples PHP to your data logic-因为在演示中使用了PHP,所以不能将两者完全分开.
实施示例
实施相对简单:
<!-- snip -->
<script>
var data = <?php echo json_encode("42", JSON_HEX_TAG); ?>; // Don't forget the extra semicolon!
</script>
<!-- snip -->
祝你好运!