POST "admin-ajax.php" 400 в многопользовательских страницах веб-интерфейса пользователя WordPress - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь использовать AJAX на страницах пользовательского веб-интерфейса из плагина в WordPress Multisite, но admin-ajax.php генерирует Bad Request 400 и всегда завершается неудачей.

  1. Разработка плагина WordPress - хорошо работает AJAX на страницах администратора
  2. WordPress Multisite
  3. Тест на сайте_1

Это часть моего кодаи вывод, я просто сокращаю его, есть класс для создания экземпляров действий AJAX и еще один после него для включения файла JS с помощью действия wp_enqueue_scripts ..

В любом случае файл JS включен правильно и отображается функция console.logвсе объекты данных JS, как вы видите в коде ниже, НО это всегда терпит неудачу и msg аргумент print Плохой запрос в statusText .. Что я пропустил ??

/* == AJAX Class == */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );


/* 1. The JS file included correctly */
wp_register_script( 'wpmu/scripts/frontend/core', 'JS_FILE.js', 
    array( 'jquery' ), '1.0', true );

/* 2. Localize */
wp_localize_script( 'wpmu/scripts/frontend/core', 'wpmu_ajax', array (
    'ajax_url'  => esc_url( admin_url('admin-ajax.php') )
  )
);

/* 3. Enqueue */
wp_enqueue_script( 'wpmu/scripts/frontend/core' );


== JS FILE ==
(function ($) {
'use strict';
$.wpmu = $.wpmu || {};
$.wpmu.ajax_vars = {
    ajax_url: wpmu_ajax.ajax_url,
};
$(document).ready(function () {
    /* 1. DEBUG */
    console.log($.wpmu.ajax_vars);
    /* 2. DEBUG - OUTPUT */
    -- ajax_vars:
    --    ajax_url: "http://localwp.com:90/wpmu/SITE_1/wp-admin/admin-ajax.php"

    /* ========= Main Code ======== */
    $(document.body).on('click', '#my-wrapper .submit', function (e) {
        e.preventDefault();

        var server_data = {
            action: 'wpmu_frontendpage',
        };

        $.ajax({
            method: 'POST',
            async: true,
            url: $.wpmu.ajax_vars.ajax_url,
            data: server_data,

        }).done(function (response) {
            alert('success');
        }).fail(function (msg) {
            console.log( msg );
        });

        return false;

    });
});

})(jQuery);

1 Ответ

0 голосов
/ 28 января 2019

Чтобы помочь другим, я нашел решение: это потому, что я сделал проверку условия IF, если не страницы администратора, и действия {wp_ajax_} ДОЛЖНЫ запускаться глобально, я подумал, что было бы полезно создать экземпляр класса AJAX, когда это необходимо во внешнем интерфейсе.только пользовательские страницы.

- Старый код - НЕПРАВИЛЬНО

if( ! is_admin() ) {
   /* Instantiate the AJAX class */
   add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
   add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
}

- Исправлено

/* Instantiate the AJAX class without NON-Admin pages condition */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' )
...