我很难弄清楚将信息从 PHP 传输到 Jquery 的最佳方式是什么。我知道将 PHP 放入 Javascript 是一个非常糟糕的选择(无论如何,我的 JS 和 PHP 文件是分开的),所以我通常做的是在 HTML 中使用 PHP 打印信息,并隐藏输入类型并使用元素检索 JQuery 中的信息.text() 或 .val() 或任何其他方法,但我觉得这有点无聊。有没有更好的办法?
2 回答
您可以简单地将 PHP 变量回显到 Javascript 变量中供您的 jQuery 使用,如下所示:
<?php
$stringVar = "hi";
$numVar = 1.5;
?>
<script>
var stringVar = "<?php echo $stringVar; ?>";
var numVar = <?php echo $numVar; ?>;
</script>
这几乎可以用于任何数据类型,只要您在回显时正确转换它(json_encode()
对于复杂结构,例如数组和对象,通常就足够了)。
另请注意,只有在定义这些变量之后包含您的 jQuery 代码时,这种方式才有效。
另一种方法是研究使用 AJAX,但如果这些是在页面生命周期内不需要更改的静态变量,那么我会使用上面的方法。
我建议永远不要使用服务器端语言来构建 JavaScript。相反,将数据保存在 HTML(模型)中,将样式保存在 CSS(视图)中,将交互保存在 JS(控制器)中。
当您需要向 JavaScript 传递数据时,请善用属性和模板。
当涉及通过属性传递数据时,仅使用本机属性就可以走很长一段路。
在这个例子中,很明显链接将打开一个模态,并且该[href]
属性用于指向模态所在的位置:
<a href="#modal" class="modal-link">Open modal</a>
<div id="modal">lorem ipsum</div>
当您无法将数据放入原生属性中时,您应该使用[data-*]
attributes。
在此示例[data-tooltip]
中,用于存储富文本工具提示。
<div data-tooltip="<p>lorem ipsum</p>">...</div>
更重要的是,当在节点上调用[data-*]
时,jQuery 会自动抓取并转换 DOM 节点上的所有属性。.data()
<div id="example"
data-foo="bar"
data-fizz="true"
data-max="100"
data-options="{"lorem":"ipsum"}">
...
</div>
<script>
$('#example').data();
/*
{
foo: 'bar',
fizz: true,
max: 100
options: {
lorem: 'ipsum'
}
*/
</script>
需要注意的是 HTML 编码中的 JSON 编码。json_encode
jQuery 使得从 DOM 节点中获取数据变得非常简单,无需担心解码,但在 PHP 中,您需要在调用之前确保数据htmlentities
:
<div data-example="<?= htmlentities(json_encode($someArray)) ?>">...</div>
在某些情况下,您可能想要使用 jQuery 的.attr()
方法。
对于大量数据,例如 HTML 模板字符串,您可以使用<script>
具有模板 mime 类型的标签(例如type="text/x-jquery-tmpl"
):
<script id="template-example" type="text/x-jquery-tmpl">
<h1>${title}</h1>
<p>${body}</p>
</script>
或者您可以使用HTML5<template>
元素:
<template id="template-example">
<h1>${title}</h1>
<p>${body}</p>
</template>
然后,您可以访问元素的 HTML 内容,并通过您最喜欢的字符串模板风格运行它。