我跟着Matt Van Andel's Custom List Table Example创建了一个管理表,通过外部MySql数据库显示对网站的查询。
实施了正确的数据显示后,我添加了一个选择框列,可让管理员更新“状态”状态。查询(等待响应,响应等),我需要通过AJAX更新我的数据库。
我需要对这些选择框进行更改以触发AJAX调用,该调用将使用新值更新数据库,但我似乎正在努力将我的外部AJAX文件正确链接到我的插件.php文件。
我已经达到了一个点(在网络标签中)我可以看到我正在加载.js文件:
list-table.php中的代码:
function ajax_test_enqueue_scripts() {
wp_enqueue_script( 'list-table', plugins_url( 'js/list-table.js', __FILE__ ), array('jquery'));
}
add_action( 'admin_enqueue_scripts', 'ajax_test_enqueue_scripts' );
我的AJAX:
jQuery('.status-select').on( 'change', function ajaxSubmit() {
alert("IT WORKED!");
$.ajax({
url: ajaxurl,
type: "POST",
cache: false,
data: this.val()
})
});
目前文件正在显示,但“正在更改”#39;部分似乎没有被解雇(因此在.js中出现警告)。
如果这个问题的措辞或组织不当,请致歉,这是我第一次发帖!
希望有人能解释我出错的地方/地点。
答案 0 :(得分:1)
这是一个非常具体的要求,但是对于在WordPress中使用自定义表并希望通过AJAX更新外部myqsl数据库的其他人 - 这就是我如何做到的。
AJAX方面的事情 -
<script>
jQuery('select.status').on('change', function() {
var $statusSelect = jQuery( this );
var $statusSelectCell = $statusSelect.parent();
var enquiryStatusValue = $statusSelect.val();
var currentBackgroundColor = $statusSelectCell.parent().css("backgroundColor");
var ajaxData = {
'action': 'update_status_db',
'currentId': $statusSelect.attr('id'),
'data': enquiryStatusValue
}
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: ajaxData,
success: function( response ) {
console.log("Data returned: " + response );
$statusSelectCell.parent().css({"background-color": "#b3e6b3"});
$statusSelectCell.parent().animate({backgroundColor: currentBackgroundColor}, 1200);
},
error: function() {
alert("FAILED TO POST DATA!!");
}
});
})
</script>
注意,在这种情况下,用户成功确认是针对特定行闪烁绿色。这是可选的。
接下来,PHP处理AJAX请求。这是在表类之外写的。
wp_enqueue_script('jquery');
add_action('wp_ajax_update_status_db','update_status_db_callback');
function update_status_db_callback(){
global $wpdb;
$newStatus = $_POST['data'];
$currentId = $_POST['currentId'];
$table = 'wp_enquiryinfo';
$result = $wpdb->update( $table, array( 'status' => $newStatus ), array( 'id' => $currentId ));
echo $_POST['data'];
if (!$result) {
echo "FAILED TO UPDATE";
} else {
$result;
echo "WILL UPDATE SUCCESSFULLY - CALL RESULT FUNCTION";
};
wp_die();
}
以下是我最初错误的一些事情: 首先,回调函数HAS以_callback结束。其次,我没有在结尾处调用wp_die函数 - 这又是必需的。
希望将来可能对某人有用。