Javascript 如何在单击子菜单页面时发出ajax请求?

Javascript 如何在单击子菜单页面时发出ajax请求?,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,我在function.php中有以下菜单页和一个子页: function data_menu() { add_menu_page( 'Data', 'Data', 'administrator', 'data', 'data_content' ); add_submenu_page( 'Data' , 'Data', 'Data'

我在function.php中有以下菜单页和一个子页:

function data_menu() {
    add_menu_page(
        'Data',
        'Data',
        'administrator',
        'data',
        'data_content'
    );    
     add_submenu_page( 
        'Data' , 
        'Data', 
        'Data', 
        'manage_options', 
        'data',
        'data_content'
    );

}

add_action('admin_menu', 'data_menu');
function admin_scripts() {
    wp_enqueue_script('my_custom_script', get_template_directory_uri() . '/js/script.js');
}

add_action('admin_enqueue_scripts', 'admin_scripts');
window.onload = function(){
    $(document).on('click', '#toplevel_page_data ul.wp-submenu li:last-of-type', function() {
    console.log('menu clicked');
    $.post('file path', {}, 
        function(data){
            console.log(data)
        });
    });
};
我想向一个PHP文件发送一个Ajax请求,因此我在function.PHP中向管理仪表板添加了javascript文件:

function data_menu() {
    add_menu_page(
        'Data',
        'Data',
        'administrator',
        'data',
        'data_content'
    );    
     add_submenu_page( 
        'Data' , 
        'Data', 
        'Data', 
        'manage_options', 
        'data',
        'data_content'
    );

}

add_action('admin_menu', 'data_menu');
function admin_scripts() {
    wp_enqueue_script('my_custom_script', get_template_directory_uri() . '/js/script.js');
}

add_action('admin_enqueue_scripts', 'admin_scripts');
window.onload = function(){
    $(document).on('click', '#toplevel_page_data ul.wp-submenu li:last-of-type', function() {
    console.log('menu clicked');
    $.post('file path', {}, 
        function(data){
            console.log(data)
        });
    });
};
在该文件中script.js

function data_menu() {
    add_menu_page(
        'Data',
        'Data',
        'administrator',
        'data',
        'data_content'
    );    
     add_submenu_page( 
        'Data' , 
        'Data', 
        'Data', 
        'manage_options', 
        'data',
        'data_content'
    );

}

add_action('admin_menu', 'data_menu');
function admin_scripts() {
    wp_enqueue_script('my_custom_script', get_template_directory_uri() . '/js/script.js');
}

add_action('admin_enqueue_scripts', 'admin_scripts');
window.onload = function(){
    $(document).on('click', '#toplevel_page_data ul.wp-submenu li:last-of-type', function() {
    console.log('menu clicked');
    $.post('file path', {}, 
        function(data){
            console.log(data)
        });
    });
};
然后,当我单击菜单时,控制台中记录了
菜单单击的句子

我认为问题在于,在打开页面之前,Ajax请求没有花足够的时间完成

页面URL变为:

http://website.com/wp-admin/admin.php?page=data

是否有一种方法可以在单击菜单时发出Ajax请求?

在您想要跟踪视图的页面上发出Ajax请求,而不是听菜单按钮的单击,这难道不容易吗

$( document ).ready(function() {
    // ajax request
});
否则,如果您真的想在菜单单击上发布请求,您必须拦截菜单单击,以便它在路由之前发出请求。比如:

$('.menu-link').click(function (e) {
    e.preventDefault(); // otherwise, it won't wait for the ajax response
    $link = $(this); // because '$(this)' will be out of scope in your callback

    $.ajax({
        type: 'POST',
        url: '/url-to-post-to',
        data: mydata,
        contentType: 'application/json',
        error: function (err) {
            alert("error - " + err);
        },
        success: function () {
            window.location.href = $link.attr('href');
        }
    });
});

信用证:

你是什么意思?是否要在发送到您单击的页面之前发送ajax请求?我想在单击该菜单或管理员查看该菜单页面时发送请求