将PHP变量传递给不带内联JS的JavaScript

时间:2016-09-22 作者:Dennis G

所以everybody and their mother 表示要使用wp_localize_script 在客户端传递PHP变量。尽管函数实际上并不是为了这个目的而设计的,但每个人都这样做。有点像Q-Tips:不是专门用来清洁耳朵的,反正每个人都会这样做。

随着技术的进步,人们普遍反对内联,我不想为所有这些小变量使用内联脚本。我特别命中注定,因为我想使用Content Security Policy HTTP标头。这里很简单is no cool way 要有内联JS(更糟糕的是:动态的内联JS,你不能这么做)和CSP。

什么other ways 我可以在PHP客户端传递一个变量集而不创建讨厌的内联吗<script> 街区?

也许WebService可以将变量推送到客户端?生成的PHPphp_variables.js 如果变量已更改,浏览器会缓存刷新,是否使用动态哈希文件?其他想法?

1 个回复
最合适的回答,由SO网友:C C 整理而成

未经测试,但天哪,它可能只是工作。。。

javascript文件:

jQuery( document ).ready(function() {
    jQuery.ajax({
        url: // !! hardcode the URL of WP admin-ajax.php here, since you don\'t want to use wp_localize_script() to pass it in...
        type: \'POST\',
        data:{
            action: \'some_action\', // this is the function (via wp_ajax_ hook) that will be triggered
        },
        success: function( data ){
            var returned_data = JSON.parse(data);
        }
    });  // jQuery.ajax
});
php文件:

wp_enqueue_script( \'my-ajax-js\', \'url of my .js file\', array(\'jquery\'), "1.0.0", true);

function get_some_variables() {
    $return_data = array("one","two","three","four");
    echo ( json_encode($return_data) );
    wp_die();
}
add_action( \'wp_ajax_some_action\', \'get_some_variables\' );
(编辑)我应该添加。。对于某些php变量来说,单向访问浏览器会带来很大的开销。我很好奇为什么你不想wp_localize_script() ?

将php变量放入DOM的另一种鲁莽的牛仔方式是将JSON编码的字符串回显到隐藏的<div>, 然后使用js从该div中提取内容。对于少量数据,您不在乎这些数据是否以纯文本形式公开。。。这也行得通。