Enqueue script dinamically

时间:2018-03-26 作者:level7

我想用Ajax动态地将脚本排队。在页面中有一个按钮,单击该按钮可调用脚本按钮脚本。js。

代码如下:

// Enqueue Ajax call
add_action(\'init\', \'enqueue_ajax_call\');
function enqueue_ajax_call() {
    wp_register_script(\'enqueue-ajax-call\', \'path/to/file/ajax-call.js\', array(\'jquery\'));
    wp_localize_script(\'enqueue-ajax.call\', \'ajax_call\', array(\'ajaxurl\' => admin_url(\'admin-ajax.php\')));        
    wp_enqueue_script(\'enqueue-ajax-call\');
}

// Enqueue script
add_action(\'wp_ajax_nopriv_buttonscript\', \'enqueue_button_script\');
add_action(\'wp_ajax_buttonscript\', \'enqueue_button_script\');
function enqueue_button_script(){
   add_action(\'wp_enqueue_scripts\', function(){
       wp_register_script(\'button-js\', \'path/to/file/button-script.js\', array(\'jquery\'), \'1.0.0\', true);
       wp_enqueue_script(\'button-js\');
    });
}

// Ajax call
(function ($) {
"use strict";
    $(document).on(\'click\', \'.button\', function() {
        $.ajax({
            url : ajax_call.ajax_url,
            data : {
                action : \'buttonscript\',
            },
        });
    })
})(jQuery);
代码中有错误,或者无法以这种方式将脚本排队?我知道,添加内联脚本或直接在init上对脚本进行排队比较容易,但有必要在单击按钮后对js文件进行排队。谢谢

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

对于AJAX的功能有一个根本性的误解。

不能直接从javascript调用的PHP将脚本排队。您需要打印一些可以由进行AJAX调用的javascript使用的内容。

然后可以使用javascript将该文件添加到DOM中。

功能。php

//* Enqueue Ajax call on wp_enqueue_scripts hook
add_action( \'wp_enqueue_scripts\', \'enqueue_ajax_call\' );
function enqueue_ajax_call() {
    wp_register_script( \'enqueue-ajax-call\', PATH_TO . \'ajax-call.js\', [ \'jquery\' ] );
    wp_localize_script( \'enqueue-ajax.call\', \'ajax_call\', [ \'ajaxurl\' => admin_url(\' admin-ajax.php\' ) ] );        
    wp_enqueue_script( \'enqueue-ajax-call\' );
}

//* Print the button script on the AJAX request.
add_action(\'wp_ajax_nopriv_buttonscript\', \'enqueue_button_script\');
add_action(\'wp_ajax_buttonscript\', \'enqueue_button_script\');
function enqueue_button_script(){
   echo PATH_TO . \'button-script.js\';
   wp_die();
}
ajax调用。js公司

//* Ajax call
(function ($) {
"use strict";
  $( document ).on( \'click\', \'.button\', function() {
    $.ajax({
      url : ajax_call.ajax_url,
        data : {
          action : \'buttonscript\',
        },
      },
      function(filename){
        // Do something useful with the filename
        var script = document.createElement( \'script\' );
        script.setAttribute( "src", filename );
        document.getElementsByTagName( "head" )[0].appendChild( script );
      });
  });
})(jQuery);

结束