在WordPress中调用ajax时出现404错误

时间:2018-02-23 14:39:57

标签: ajax wordpress

我正在开发一个WordPress插件并尝试在其中使用wp_ajax

这是我的代码:

function register_role_category_access() {
   wp_enqueue_script( 'role_category_access', plugin_dir_url( __FILE__ ) . 'js/category-restrict.js', array( 'jquery' ), '1.0.0', true );
   wp_localize_script( 'role_category_access', 'category_access_ajax_url', array(
      'url'   => admin_url( 'admin-ajax.php' ),
      'nonce' => wp_create_nonce( 'role_access_nonce' )
   ) );
}

add_action( 'admin_enqueue_scripts', array( $this, 'register_role_category_access' ) );

function update_role_category_access() {
   $user_role = isset( $_POST[ 'user_role' ] ) ? $_POST[ 'user_role' ] : 'Not defined';
   $selected_cats = isset( $_POST[ 'selected_cats' ] ) ? $_POST[ 'selected_cats' ] : 'None selected';
   echo "Chosen role: " . $user_role . ' and categories are ' . $selected_cats;
   die();
}

add_action( 'wp_ajax_category_access', array( $this,  'update_role_category_access' ) );

由于上述操作只能在管理员面板上完成,因此我没有使用wp_ajax_nopriv_*挂钩。

JavaScript文件内容(category-restrict.js):

function updateAccess( obj ) {
    var selectedCatIds = "";
    var accessBox =  jQuery( obj ).closest( '.access-box' );
    var roleSlug = jQuery( accessBox ).find(".hidden_role").attr("value");
    var catList = jQuery( obj ).closest( '.access-box' ).find( '.category-list' );
    jQuery( catList ).children().each( function() {
        if( jQuery(this).is(":checked") ) {
        selectedCatIds += jQuery(this).val() + ",";
        }
    });

    var idLen = selectedCatIds.length;
    if( idLen > 0 ) {
        selectedCatIds = selectedCatIds.substring(0, idLen - 1);
    }

    jQuery.ajax({
        type: 'POST',
        url: category_access_ajax_url, //wp_localize_script: 844
        data: {
            action: 'category_access', //wp_ajax_category_access: 71
            user_role: roleSlug,
            selected_cats: selectedCatIds,
        },
        success: function( result ) {
            alert( result );
        }
    });
}

但是当我调用脚本时,我在控制台中收到以下错误:

  

http://album.multibaselocal.com/wp-admin/[object%20Object] 404(不是   实测值)

我调查了this,但由于我对WordPress的了解仍然有限,因此无法理解我做了什么错误。

1 个答案:

答案 0 :(得分:2)

AJAX通话中的url参数错误。 category_access_ajax_url是一个包含urlnonce的JS对象,因此您的代码应该是这样的:

jQuery.ajax({
    type: 'POST',
    url: category_access_ajax_url.url, // access the url property inside category_access_ajax_url
    data: {
        action: 'category_access',
        user_role: roleSlug,
        selected_cats: selectedCatIds,
    },
    success: function( result ) {
        alert( result );
    }
});

我建议将category_access_ajax_url重命名为category_access_ajax以避免混淆。

更新:您真的不需要category_access_ajax_url.url,因为WordPress defines a global variable called ajaxurl in the admin area可以用于此目的。