2016-11-07 6 views
0

WPプラグインでオンラインのコーセをフォローするプラグインを作成しようとしています。WordPressプラグインのajaxに関する問題

Iamはプラグインのajax部分(電子メールリストビルダ)に重大な問題を抱えています。

これは、ローカルホスト上のいくつかのPHPコードを実行すると警告ウィンドウの成功/エラーメッセージを表示するようになっている私の.js jQueryのコードです:

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;   
    }); 

}); 

とPHPの一部(はい、subscribtion Bは意図的です。私はそれを文法的に問題があったので、すべてのケースでBに固執する方が簡単だと決めました)。それは管理エリアで、サブスクリプション・ポストに新しいサブスクリプションを保存し、その後にsuccesss /エラー・メッセージを返して:その完全にコードの行数百人とコードが正常に動作しているがため

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'); 
} 

IAMがplb_save_subscribtion機能を示していません。 json形式をクライアントに送信します。

jQueryが今行う必要があるのは、ajax経由でこの投稿を行い、同じplb_save_subscribtion応答クライアントをアラートウィンドウに挿入することです。

私はこの問題を解決しようと努力していますが、役に立たなかったので、一日中グーグルで過ごしました。アイデアがないので、ここに投稿してください。このコードに何か問題がありますか?そうでない場合は、問題を探しているはずです(コードはコピー/ペーストされていて正常に動作するはずですが、そうではありません)。私が関数の上部に簡単な警告メッセージを入れたら、警告メッセージが表示されます。しかし、私がフォーム上でsubmitを押すと、ページがリロードされ、私は.jsonにメッセージを返します。警告ウィンドウも、ajaxもありません。誰か?

+0

コードをコピー/貼り付けするためではありません。どのようにjQueryファイルをエンキューしていますか?wp_ajax_youractionが実行されてadmin 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); 
     } 
    });   
}); 

この方法を試してみてください。アラートウィンドウにフォームデータが表示されます。

関連する問題