2

在我的 wordpress 插件中我的 WP_Widget 类的小部件函数中,我有一个名为 $hello 的 php 数组变量。我想将此变量传递给javascript。我看过函数 wp_localize_script 并尝试使用它。但它不能从函数内部工作。如何让它发挥作用?

这是我的 WP_Widget 类的 widget() 函数中的代码。

wp_register_script('color-script', plugin_dir_url(__FILE__).'scripts/custom.js');
wp_enqueue_script('color-script');
$data = array("text_color" => $instance['text-color'], "bg_color" => $instance['bg-color'], "button_color" => $instance['button-color']);
wp_localize_script('color-script', 'php_data', $data);

这是 custom.js 中的 javascript。

document.getElementById("wid-small-div").style.color = php_data.text_color;
document.getElementById("wid-small-div").style.background = php_data.bg_color;
4

3 回答 3

1

没那么简单。PHP 是一种服务器端语言,这意味着服务器接收请求,呈现页面,然后将其发送到浏览器。Javascript是一种客户端语言(至少在您的情况下),这意味着它在客户端从服务器接收到呈现的页面后由客户端的浏览器应用。

您不能只将 PHP 变量传递给 Javascript,因为浏览器无法访问它们,而且 PHP 甚至在 JS 发挥作用之前就已经完成了执行。

为了做到这一点,您需要一个 AJAX 请求或类似的东西,这是一个由 Javascript 对服务器(即 PHP 函数)进行的异步调用,允许您在服务器和客户端之间传递数据(通常是 JSON)而无需重新加载页。jQuery 具有非常强大的内置 AJAX 支持,这使得这变得相当容易。

在您的情况下,您只需要使用 jQuery 向返回$hello数组的服务器上的 PHP 函数发送请求,以便您可以在 JS 中使用它。在 PHP 和 JS 之间传递变量等简单情况下,您也可以使用它wp_localize_script()来实现这一点,但我们无法在不查看您的代码的情况下对您的代码进行故障排除。

于 2013-10-09T17:29:58.660 回答
0

您需要做的就是将$hello变量的内容打印为 JS 变量:

# WP_Widget::widget()
echo '<script>var hello = ' . json_encode($hello) . ';</script>';

然后,一旦呈现小部件,您将hello在 JS 中拥有一个变量。

于 2013-10-09T17:36:12.413 回答
0

是的,您可以将 PHP 变量传递给 javascript,但不能将变量从 Javascript 传递给 PHP。PHP 是在服务器端处理的,所以当页面显示在浏览器上时,所有 PHP 都已处理完毕,Javascript 将开始工作。

你可以这样尝试:

var hello = '<?php echo $hello ?>';
于 2013-10-09T17:36:58.743 回答