javascript - 单击子菜单页面时如何发出ajax请求?
问题描述
我在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');
我想向 PHP 文件发送 Ajax 请求,因此我在function.php的管理仪表板中添加了 javascript 文件:
function admin_scripts() {
wp_enqueue_script('my_custom_script', get_template_directory_uri() . '/js/script.js');
}
add_action('admin_enqueue_scripts', 'admin_scripts');
在该文件script.js中:
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)
});
});
};
然后当我点击菜单时,这句话menu clicked
被记录在控制台中。
我认为问题在于 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');
}
});
});
推荐阅读
- r - ggplot&ie with parse=T 等号问题
- excel - 如何引用所有正在运行的 Excel 应用程序实例的 COM 对象,包括隐藏和没有工作簿?
- javascript - 如何在没有硬编码的情况下有效地在 react-google-charts 中传递数据?
- python - 删除元组外的数据框行
- php - WordPress 中的 username_exists 函数抛出 500 错误(函数未定义),尽管需要/包含 pluggable.php 和 user.php
- php - 无法选择 *(ORA-00932:不一致的数据类型:预期的 CHAR 得到了 ADT)
- tensorflow - 读取用于编码的特征未知的 TFRecord 文件
- python - 使用矩形边界框将图像切成文本行
- android - android webview中未显示“选择证书”对话框
- bash - FFMPEG:通过 RTP 的 32 通道流式麦克风