web-dev-qa-db-ja.com

0を返すAjax呼び出し

私のコードは次のとおりです。

   $("#member_country").change(function() {
        var country = $(this).val();
        alert(country);
        var ajax_url_mtypes = ins_membership_ajax.ajax_url + '?action=ins_get_membershiptypes_from_country&country='+country;
        alert(ajax_url_mtypes);
        jQuery.ajax({
        url:ajax_url_mtypes,            
        method:'GET',
        contentType: "application/json;charset=utf-8",
        success:function(response) {
          //var resp = $.trim(response);
          alert(response);
          //$("#ins-member-profile-select-state").html(resp);
      }
      });

  add_action('wp_enqueue_scripts',array(INS_Membership::get_instance(),'ins_event_front_scripts'));

 public function ins_event_front_scripts(){
    wp_register_script('member-front-script',plugins_url('/js/member-front-script.js', __FILE__),array('jquery'),'1.1',true);
    //localize script for ajax url
    wp_localize_script( 'member-front-script','ins_membership_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
    wp_enqueue_script('member-front-script');
    //enqueue styles
    wp_register_style('member-front-styles',plugins_url('/css/member-front-styles.css', __FILE__));
    wp_enqueue_style('member-front-styles');

}

add_action('wp_ajax_ins_get_membershiptypes_from_country',array(INS_Membership::get_instance(),'ins_get_membershiptypes_from_country_callback'));

Ajax呼び出しに対して0の応答があります。これを修正するにはどうすればいいですか。

1
Karts

Ajaxハンドラを定義するときは、ログインしているユーザーとログインしていないユーザーの両方に対して定義することを検討する必要があります。あなたがそうすることができます:

add_action('wp_ajax_my_handler', 'callback_function');
add_action('wp_ajax_nopriv_my_handler', 'callback_function');

さて、あなたの質問は。興味があれば、このコードをRESTエンドポイントに変えることができます。ルートを定義することから始めましょう。

add_action( 'rest_api_init', function () {
    register_rest_route( 'karts', '/ins_get_membershiptypes_from_country/', array(
            'methods' => 'GET',
            'callback' => 'ins_get_membershiptypes_from_country_callback'
    ) );
});

この時点で、次のものにアクセスしてクエストを実行できます。

www.example.com/wp-json/karts/ins_get_membershiptypes_from_country/

今Ajaxの呼び出し。これを使用してスクリプトをローカライズし、サイトのURLを渡します。

wp_localize_script( 'member-front-script','ins_membership_ajax', array(
    'ajax_url' => site_url()
));

そのため、Ajax呼び出しでパスにアクセスできます。

   $("#member_country").change(function() {
        var country = $(this).val();
        alert(country);
        var ajax_url_mtypes = ins_membership_ajax.ajax_url + '/kartsins_get_membershiptypes_from_country';
        alert(ajax_url_mtypes);
        jQuery.ajax({
        url:ajax_url_mtypes,            
        method:'GET',
        data : { country : country},
        dataType: 'json',
        success:function(response) {
          //var resp = $.trim(response);
          alert(response);
          //$("#ins-member-profile-select-state").html(resp);
      }
      });

呼び出し用にJSONデータ型を定義したわけではありません。これにより、デフォルトでJsonの応答が得られます。

0
Jack Johansson