【问题标题】:Getting 404 error when calling ajax in WordPress在 WordPress 中调用 ajax 时出现 404 错误
【发布时间】:2018-02-23 14:39:56
【问题描述】:

我正在开发一个 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 的了解仍然有限。

【问题讨论】:

    标签: ajax wordpress


    【解决方案1】:

    您在 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

    【讨论】:

    • 哦!!!真是个错误。非常感谢你的帮助。现在工作正常:)
    猜你喜欢
    • 2014-01-23
    • 2020-11-28
    • 2012-06-30
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多