Запрос ajax в ответ на WordPress НЕВЕРНЫЙ ЗАПРОС

#php #jquery #wordpress

#php #jquery #wordpress

Вопрос:

У меня есть некоторые проблемы с моим плагином WordPress:

 $.ajax(send_rendered_photo.ajaxurl "?action=save_photo",{
  type: "POST",
  data:{imgURL: dataURL},
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  complete: function(response){

  },
  success: function(data) {
      alert(data.data);
  },
  error: function(data){
      alert("fail");
  }
});
return false;
 
  

Когда у меня есть этот код jQuery в моем js-файле, ответ — null, а в PHP $_POST['imgURL'] null, но когда у меня есть:

 $.ajax(send_rendered_photo.ajaxurl,{
  type: "POST",
  data:{
        imgURL: dataURL,
        action: "save_photo",
        },
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  complete: function(response){

  },
  success: function(data) {
      alert(data.data);
  },
  error: function(data){
      alert("fail");
  }
});
return false;
  

в консоли есть:

СООБЩЕНИЕ http://localhost:81/wordpress/wp-admin/admin-ajax.php 400 (неверный запрос)

Вот мой PHP:

 function l_m_add_ajax_js(){
  wp_enqueue_script('l_m_ajax_render_photo', plugins_url('scripts/save_photo.js', __FILE__), true);
  if(isset($_SERVER['HTTPS'])){
    $protocol = 'https://';
  }
  else{
    $protocol = 'http://';
  }
  $params = array('ajaxurl'=>admin_url('admin-ajax.php',$protocol));
  wp_localize_script('l_m_ajax_render_photo','send_rendered_photo', $params);
}

add_action('wp_footer', 'l_m_add_ajax_js');
add_action('wp_ajax_save_photo', 'save_photo');
add_action('wp_ajax_nopriv_save_photo', 'save_photo');
function save_photo(){
  $imgURL = $_POST['imgURL'];
  $response = array(
    'success'=>true,
    'data'=>$imgURL
  );
  print json_encode($response);
    exit;
}      
  

Я не знаю, в чем проблема. Спасибо за любую помощь

РЕДАКТИРОВАТЬ: Есть фотографии заголовка и ответа send_rendered_photo.ajaxurl ответ

заголовки

Это полный js-код

 $("#save").on('click',function(){
                html2canvas(document.getElementById("create")).then(function (canvas) {
                var dataURL = canvas.toDataURL("image/png", 0.9);
                alert(dataURL);//dataURL is ok
               $.ajax(send_rendered_photo.ajaxurl "?action=save_photo",{
                        type: "POST",
                        data: dataURL,
                        dataType: "json",
                        complete: function(response){

                        },
                        success: function(data) {
                            alert(data); // data is undefined
                        },
                        error: function(data){
                            alert("fail");
                        }
                    });
               return false;
           });
            });
  

ПРАВИТЬ ПРАВИТЬ:
Я изменил в js-файле «data:{imgURL: dataURL}» на «data: dataURL» и $.ajax на $.post, и это сработало

Комментарии:

1. Где установлена переменная ‘dataURL’? Проверьте пример этой страницы codex.wordpress.org/AJAX_in_Plugins

Ответ №1:

Вы уверены, что ваша переменная send_rendered_photo.ajaxurl содержит правильный URL и не является пустой?

Комментарии:

1. Я уверен, потому что в консольной сети указан правильный URL и отправлен imgURL, но запрос равен нулю

2. Я только что заметил, что вы неправильно фиксируете данные в своей функции save_photo (), поэтому ваша $_POST['imgURL'] функция всегда будет нулевой. Что вам нужно сделать, так это захватить данные следующим образом: $data = $_POST['data']; и затем вы можете получить imgURL с $data['imgUrl'] не уверен, решит ли это вашу проблему.

3. Теперь это не помогает, мой PHP — это функция save_photo(){ $data = $ _POST[‘data’]; $imgURL = $data[‘imgURL’]; $response = array( ‘success’=> true, ‘data’=> $imgURL ); печать json_encode ($response); выход; } Заголовки Im сетевая консоль является переменной imgURL, но в ответе данные равны нулю