2016-11-07 3 views
0

Я пытаюсь сделать плагин, используя онлайн-корс в WP плагинах.Проблемы с ajax в плагине WordPress

Iam имеет серьезные трудности с частью ajax плагина (его создателем списка адресов электронной почты).

Это мой .js JQuery код, который должен выполнить некоторый PHP-код на локальном хосте, и показать сообщение успеха/ошибки в окне предупреждения:

jQuery(document).ready(function($){  

    var wpajax_url = document.location.protocol + '//' + document.location.host + 'wordpress_plugin_course/wp-admin/admin-ajax.php?action=plb_save_subscribtion'; 

    $('form.plb-form').bind('submit', function(){ 

     $form = $(this); 
     var form_data = $form.serialize(); 

     $.ajax({ 
      'method':'post', 
      'url':wpajax_url, 
      'data':form_data, 
      'dataType':'json', 
      'cache':false, 
      'success':function(data, textStatus){ 
       if(data.status == 1){ 
        $form[0].reset();  
        alert(data.message); 
       } else{ 
        var msg = data.message +'\r'+ data.error + '\r'; 
        $.each(data.errors,function(key,value){  
         msg += '\r'; 
         msg += '- ' + value; 
        }); 
        alert(msg);     
       } 
      }, 
      'error':function(jqXHR, textStatus, errorThrown){ 

      } 

     }); 

     return false;   
    }); 

}); 

РНР части (Да, с Подписка на B в нем преднамеренно, потому что у меня были проблемы с этим грамматически, и я решил, что будет проще просто придерживаться B во всех случаях).

add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');      
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion');    
add_action('wp_enqueue_scripts', 'plb_public_scripts');  

function plb_public_scripts(){                
    wp_register_script('profi-list-builder-js-public', plugins_url('/js/public/profi-list-builder.js', __FILE__), array('jquery'),'1.0',true); 
    wp_enqueue_script('profi-list-builder-js-public'); 
} 

Иам не показывает функцию plb_save_subscribtion, потому что его сотни строк кода в целом и код работает отлично: он сохраняет новые подписки на подписной пост в админке, а затем возвращает сообщение successs/ошибка в. json для клиента.

Что мне нужно, чтобы сделать jQuery сейчас, это сделать это через ajax и поместить тот же клиент реакции plb_save_subscribtion в окно предупреждения.

Я потратил буквально весь день на поиск в Интернете, пытаясь решить эту проблему, но безрезультатно. Я из идей, так что я отправляю его здесь. Что-то не так с этим кодом? Если нет, где я должен искать проблему (потому что код скопирован/вставлен и СЛЕДУЕТ работать нормально, но это не так)? Если я помещаю сообщение с простым предупреждением внутри верхней части функции, появляется предупреждающее сообщение, как и предполагалось. Но когда я нажимаю кнопку отправки в форме, перезагружается страница, и я возвращаю сообщение в .json, без окна предупреждения, без ajax. Кто-то?

+0

Это не потому, что вы копируете/вставляете код, который будет работать. Как вы вставляете файл jQuery и запускаете wp_ajax_youraction, чтобы заставить его работать для URL-адреса администратора? Если вы получаете json-ошибку, вы закрываете ошибку. – Benoti

+0

Я думаю ** action = plb_save_subscribtion ** должно быть ** action = plb_save_subscription ** (но, возможно, орфографическая ошибка соответствует действию). На самом деле проблема запроса AJAX без серверной части на самом деле не описывается. –

ответ

0

Добавьте следующий код в ваших плагинов файл

add_action('wp_enqueue_scripts', 'ajax_test_enqueue_scripts'); 

function ajax_test_enqueue_scripts() { 
    wp_enqueue_script('custom', plugins_url('/custom.js', __FILE__), array('jquery'), '1.0', true); 
    wp_localize_script('custom', 'postCustom', array(
     'ajax_url' => admin_url('admin-ajax.php')) 
    ); 

} 


function plb_save_subscribtion(){ 

    print_r($_POST['form_data']); 

} 
add_action('wp_ajax_nopriv_plb_save_subscribtion', 'plb_save_subscribtion');      
add_action('wp_ajax_plb_save_subscribtion', 'plb_save_subscribtion'); 

Добавьте в ваш файл JS (здесь custom.js)

jQuery('form').bind('submit', function(){ 



     var form_data = jQuery(this).serialize(); 


     jQuery.ajax({ 
     url : postCustom.ajax_url, 
     type : 'post', 
     data : { 
      action : 'plb_save_subscribtion', 
      form_data : form_data 
     }, 
     success : function(response) {    
      alert(response); 
     } 
    });   
}); 

Попробуйте этот путь. Вы можете увидеть данные формы в окне предупреждения.