AJAX在Wordpress自定义表中更新mySQL

时间:2016-06-15 10:20:30

标签: ajax wordpress

我跟着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中出现警告)。

如果这个问题的措辞或组织不当,请致歉,这是我第一次发帖!

希望有人能解释我出错的地方/地点。

1 个答案:

答案 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函数 - 这又是必需的。

希望将来可能对某人有用。