Wordpress: Журналы запросов Ajax 400 Bad Request для консоли - PullRequest
1 голос
/ 03 мая 2019

Я получаю эту ошибку:

POST http://localhost/wptest2/wp-admin/admin-ajax.php 400 (Bad Request)
(anonymous) @ VM12565:1
send @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
ajax @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
(anonymous) @ options-general.php?page=fvc-settings:784
dispatch @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
r.handle @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
  1. В приведенном ниже коде ajaxPost () подключен к нижнему колонтитулу администратора моего плагин.
  2. При нажатии на кнопку, выбранную jQuery, он должен запустить зарегистрированный почтовый запрос и вернуть простой ответ.

Это не то, что происходит с jQuery.post () или $ .ajax (). Я попробовал несколько вещей, упомянутых ниже в комментариях, но не могу заставить его работать, кто-нибудь может рассказать о проблеме?

function ajaxPost() {
  ?>

  <script>     
    jQuery(document).ready(function($) {        
      $('#previousButton').click(function() {
        var postData = {
          action : 'selectTargetsWithOffset',
          data : {
            offsetMultiplier : 1,
            incrementSize : 10
          },
          success : function(response) {
            console.log(`=====jQuery success=====`);
          }
        };

        var handleResponse = function(response) {
          console.log(response, `=====response=====`);
        };

        jQuery.post(ajaxurl, postData, handleResponse);

        // this code also threw a 400 error when 
        // I commented out the above code instead
        // $.ajax({
        //   type: "POST",
        //   url: ajaxurl,
        //   dataType: "json",
        //   data: {
        //     action: "selectTargetsWithOffset",
        //   },
        //   success: function() {
        //     console.log(response, `=====response 
        //       from $.ajax}=====`);
        //   }
        // });

      })

    })
  </script>
  <?php
}
add_action('admin_footer', 'ajaxPost');


function selectTargetsWithOffset() {
  wp_send_json([ 'message' => 'from back end' ]);
  wp_die();
}
add_action('wp_ajax_selectTargetsWithOffset', 'selectTargetsWithOffset');

Также попробовал - Зайдите в admin-ajax.php и измените код ответа с 400 на 420, чтобы посмотреть, что он будет делать. Я получил странную ошибку, отражающую изменение.

if ( is_user_logged_in() ) {
// If no action is registered, return a Bad Request response.
if ( ! has_action( "wp_ajax_{$action}" ) ) {
    wp_die( 'Test', 420 );
}
  • Изменение '0' в arg1 функции wp_die () на "Test" и посещение этого URL в браузере: http://localhost/wptest2/wp-admin/admin-ajax.php. Я до сих пор вижу 0, отображенных на странице (один) по этому адресу

Добавление следующего к началу admin-ajax.php:

  ?>
    <script>
      console.log(`=====TEST=====`);
      var request = "<?php echo $_REQUEST ?>";
      console.log(request['action'], `=====request=====`);
    </script>
  <?php

Когда я пытаюсь инициировать вызов ajax в моей административной области, я все равно получаю только журнал консоли 400 неверных ответов. Однако, когда я непосредственно перехожу на URL, теперь я вижу оператор === TEST ===, и запрос помечается как неопределенный (как я и ожидал). Я понимаю, что это означает что-то о том, что я называю запрос ajax неверным.

Вот мой HTML-код для кнопки, которая выполняет вызов:

<button id="previousButton">Previous</button>

В ответ на предложение по упрощенному обратному вызову

Вот консольный журнал:

=====jQuery success=====
VM13659:1 POST http://localhost/wptest2/wp-admin/admin-ajax.php 400 (Bad Request)
(anonymous) @ VM13659:1
send @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
ajax @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
n.(anonymous function) @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
(anonymous) @ options-general.php?page=fvc-settings:785
dispatch @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
r.handle @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3

А вот и код:

function ajaxPost() {
  ?>
  <script>

    jQuery(document).ready(function() {
      jQuery('#previousButton').click(function() {

        var postData = {
          action : 'selectTargetsWithOffset',
          data : {
            offsetMultiplier : 1,
            incrementSize : 10
          },
          success : function(response) {
            console.log(`=====jQuery success=====`);
          }
        };

        var handleResponse = function(response) {
          console.log(response, `=====response=====`);
        };

        jQuery.post(ajaxurl, postData, handleResponse);
      }); 
    })
  </script>
  <?php
}
add_action('admin_footer', 'ajaxPost');


function selectTargetsWithOffsetcb() {
  print_r($_POST);
  die();
}

add_action( 'wp_ajax_selectTargetsWithOffset', "selectTargetsWithOffsetcb");
add_action( 'wp_ajax_nopriv_selectTargetsWithOffset', "selectTargetsWithOffsetcb" );

На самой странице нет вывода print_r (), он остается прежним без какого-либо обновления

Стоит еще раз отметить, что код отладки ====TEST=== в admin-ajax.php не смог войти в систему. Я думаю, это означает, что запрос по какой-то причине не достигает этого файла (поскольку переход к этому файлу в браузере приводит к тому, что он входит в консоль)


Тоже пробовал, но тоже ошибка 400:

function ajaxPost() {
  ?>
  <script>    
    jQuery(document).ready(function() {
     jQuery(document).on("click","#previousButton", function() {
       jQuery.ajax({
         url: "<?php echo admin_url( 'admin-ajax.php' ) ?>",
         data: {"action":"selectTargetsWithOffset","datas": {"name": "yourfields"}},
         type:"post",
         success: function(data) { alert(data); }
       })
     });    
    })
  </script>
  <?php
}
add_action('admin_footer', 'ajaxPost');

1 Ответ

0 голосов
/ 04 мая 2019

Я думаю, что вы не объявили функции обратного вызова в вашем плагине или файле функций.

Пожалуйста, добавьте приведенный ниже код в ваш плагин или файл fn и протестируйте его.

add_action( 'wp_ajax_selectTargetsWithOffset', "selectTargetsWithOffsetcb");
add_action( 'wp_ajax_nopriv_selectTargetsWithOffset', "selectTargetsWithOffsetcb" );

function selectTargetsWithOffsetcb()
{

    print_r($_POST);
    die();
}

Также обновите этот js

    <script>
jQuery(document).on("click","#previousButton",function(){

jQuery.ajax({
url:"<?php echo admin_url( 'admin-ajax.php' ) ?>",
data:{"action":"selectTargetsWithOffset","datas":{"name":"yourfields"}},
type:"post",
success:function(data){alert(data);}
})
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...