<script src="xxx" .... />
直接包含在header.php中的js文件中的对象“ ajaxobject” q4312079q wp_register_script( 'ajaxscript', get_bloginfo( 'template_url' ) . '/js/ajaxscript.js', array(), $version );
wp_enqueue_script( 'ajaxscript' );
wp_localize_script( 'ajaxscript', 'ajaxobject',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'ajaxnonce' => wp_create_nonce( 'itr_ajax_nonce' )
)
);
#1 楼
您可以将js变量挂在wp_head上,而不是在那种情况下使用wp_localize_script,这样它将对所有js文件都可用。:同样按照@Weston Ruter的建议,您应该对变量进行json编码:
function my_js_variables(){ ?>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url( "admin-ajax.php" ); ?>';
var ajaxnonce = '<?php echo wp_create_nonce( "itr_ajax_nonce" ); ?>';
</script><?php
}
add_action ( 'wp_head', 'my_js_variables' )
评论
您应该在这里使用json_encode,例如:var ajaxurl = <?php echo json_encode(admin_url(“ admin-ajax.php”)); ?>;
– Weston Ruter
13-10-22在20:33
好吧,我现在将其添加
–库马尔
13-10-23在5:40
#2 楼
您可以在wp_head
挂钩中导出所需的任何数据,如上面的答案所示。但是,您应该使用json_encode
来准备要导出到JS的PHP数据,而不是尝试将原始值嵌入JS文字中: ,并且如果您的字符串包含任何引号,它可以防止意外的语法错误。更重要的是,使用json_encode
可以阻止XSS攻击。#3 楼
我最终做到了。现在可以使用了!谢谢@ dot1function itr_global_js_vars() {
$ajax_url = 'var itrajaxobject = {"itrajaxurl":"'. admin_url( 'admin-ajax.php' ) .'", "itrajaxnonce":"'. wp_create_nonce( 'itr_ajax_nonce' ) .'"};';
echo "<script type='text/javascript'>\n";
echo "/* <![CDATA[ */\n";
echo $ajax_url;
echo "\n/* ]]> */\n";
echo "</script>\n";
}
add_action( 'wp_head', 'itr_global_js_vars' );
评论
您应该使用json_encode而不是手动创建JSON。
– Weston Ruter
13-10-22在20:32
我现在正在使用json_encode :)谢谢@WestonRuter!
– Subharanjan
18年4月5日在13:32
#4 楼
虽然这不是我最好的工作,但这是完成将数据放入响应中的另一种直接方法:<?php
/**
* Add data to global context.
*
* @param string $name
* @param mixed $value
* @return mixed|array
*/
function global_js($name = null, $value = null)
{
static $attached = false;
static $variables = [];
if (! $attached) {
$provide = function () use (&$variables) {
if (! empty($variables)) {
echo("<script type=\"text/javascript\">\n\n");
foreach ($variables as $name => $value) {
echo(" window['$name'] = JSON.parse('".json_encode($value)."');\n");
unset($variables[$name]);
}
echo("\n</script>\n");
}
};
add_action('wp_print_scripts', $provide, 0);
add_action('wp_print_footer_scripts', $provide, 0);
$attached = true;
}
if (is_null($name) && is_null($value)) {
return $variables;
}
return $variables[$name] = $value;
}
向窗口上下文添加一些JS数据:
<?php
global_js('fruits', ['apple', 'peach']);
// produces: `window['fruits'] = JSON.parse('["apple", "peach"]');`
这将适用于页眉脚本或页脚脚本,并且不会重复。
评论
只需在主题内添加内联JS。无论如何,这正是wp_localize_script所做的。使用这两种方法,都可以从任何脚本访问变量如果您控制着这些脚本,那么您将如何处理头部未正确排队的脚本? wp_localize_script的概念是使您可以使用自己的脚本-您正在使用wp_enqueue_script正确加载该脚本。在哪种情况下,您会故意在需要这些变量的头文件中加载脚本,而不是通过wp_enqueue_script加载脚本?
@cale_b:header.php中已经包含一个脚本,并且其中包含许多脚本,当我尝试通过wp_enqueue_script将该js文件放入队列时,这些脚本开始中断工作。我需要从该脚本文件中进行ajax调用。因此,与其破坏功能并一一修复,我需要一个快速的解决方案。甚至我不确定网站的哪一部分会因为'wp_enqueue_script'的微小更改而中断:(
很公平。提示,获取适用于Firefox的Firebug,您可以使用控制台观看/查看javascript错误。故障排除的宝贵工具。