在POST内容中使用Java脚本的AJAX调用(未入队)

时间:2016-03-18 作者:Norader

我想在JS中进行Ajax调用,我不想在整个网站中排队。

为此,我将脚本直接放在与之相关的帖子末尾,而不是添加wp_enqueue_script().

到目前为止,它工作得很好,但我需要在脚本中添加一个Ajax调用,但这似乎不起作用,因为我不知道如何设置wp_localize_script() 该上下文中的命令。

预期结果是显示警报1 单击按钮时。

职位是:

<button id="button">
Click me!</button><script type="text/javascript" src="../script.js"></script>
js文件类似于:

jQuery(document).ready(function($){
var s=1;

$(\'button\').on(\'click\',function() {
    //wfire the ajax call
 jQuery.ajax({
    url : postbutton.ajax_url,
    type : \'post\',
    data : {
        //name of the function defined in the main plugin php file
        action : \'function\',
        data : s
    },
    success : function( response ) {
        alert(response);
            }
      }); 
    });
  });
PHP如下所示:

add_action(\'wp_ajax_function\',\'function);
add_action( \'wp_enqueue_scripts\', \'function_enqueue_scripts\' );
function function_enqueue_scripts() {
//I would not like to enqueue js script since I appended it directly in the post
//wp_enqueue_script( \'ff\', \'../script.js\', array(\'jquery\'), \'1.0\', true );
    wp_localize_script( \'ff\', \'postbutton\', array(
        \'ajax_url\' => admin_url( \'admin-ajax.php\' ),
    ));
};

function function() {
$s=$_REQUEST[\'s\'];
return $s;
}

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

如果内联添加脚本,则无需使用wp_localize_script. 你所要做的就是直接打印你的内联脚本,就像你需要的那样。

例如,在模板中:

<?php
   // The PHP code of the template here
?>
<script>
jQuery(document).ready(function($){
  var s=1;

  $(\'button\').on(\'click\',function() {
    //wfire the ajax call
   jQuery.ajax({
     url : postbutton.ajax_url,
     type : \'post\',
     data : {
        //name of the function defined in the main plugin php file
        action : \'function\',
        ajax_url : <?php echo esc_js( admin_url( \'admin-ajax.php\' ) ); ?>;
     },
     success : function( response ) {
        alert(response);
     }); 
  });
});
</script>
<?php
    // PHP code of the rest of the template
?>
不管怎样,你做错了。如果直接打印内联脚本,you can not use the power of WordPress dependencies manager 你最终可能会遇到很多问题。例如,如果决定将jQuery移动到页脚,依赖于jQuery的内联JavaScript将停止工作。另一个例子是imposibility of localize the script because it has not an associate handle.

所以,如果你的脚本依赖于其他脚本,ALWAYS use WordPress dependencies manager.

而且您只能在单个帖子中对脚本排队,这不是问题:

add_action( \'wp_enqueue_scripts\', \'function_enqueue_scripts\' );
function function_enqueue_scripts() {
    if( is_singular( \'post\' ) {
        // Enqueue my script that depends on jQuery
        // only in single post view
        wp_enqueue_script( \'my-script\', get_template_directory_uri() . \'/script.js\', array(\'jquery\'), \'1.0\', true );
    }
}
由于即将推出的WordPress 4.5,您可以使用新功能打印具有依赖项的内联scritpswp_add_inline_script(). 在此之前,我重申,永远不要打印依赖于其他脚本的脚本,否则您无法管理依赖关系,包括本地化。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i