为什么前端的wp-ajax会返回0但是在管理中它能正常工作?

时间:2016-06-23 15:54:56

标签: javascript php jquery ajax wordpress

这些是我在插件中使用它们的功能。它在后端工作,但在前端它响应0。我复制了相同的代码,并且更喜欢admin_enqueue_scriptswp_enqueue_scripts

add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );

function my_action_callback() {
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
    echo $whatever;
wp_die();
}

function testajax(){
var data = {
    'action': 'my_action',
    'whatever': ajax_object.we_value      // We pass php values differently!
};

jQuery.post(ajax_object.ajax_url, data, function(response) {
    alert('Got this from the server: ' + response);
});
};

我在onClick事件中使用过它。

我也用过

add_action( 'admin_enqueue_scripts', 'my_enqueue' );

用于管理员和

add_action( 'wp_enqueue_scripts', 'my_enqueue' );

for frontend

add_action( 'wp_enqueue_scripts', 'my_enqueue' );
function my_enqueue($hook) {

wp_enqueue_script( 'ajax-script',    get_stylesheet_directory_uri().'/my_query.js', array('jquery') );


  wp_localize_script( 'ajax-script', 'ajax_object',
        array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );   
}

这是我想在自定义页面中加载的脚本,但它不会加载到自定义页面中。对于加载我必须在functions.php中使用它,然后当我在functions.php中使用它时,它将被加载到注释中所说的所有页面中。有问题。

2 个答案:

答案 0 :(得分:0)

您尝试拨打的网址是否可能在管理员中不存在?尝试使用ajaxurl代替ajax_object.ajax_url

答案 1 :(得分:0)

默认情况下,Ajax URL在前端不可用。您必须在使用之前对其进行本地化:

wp_localize_script('my_enqueue', 'ajax_object', array('ajax_url' => admin_url('wp-ajax.php')));