私のコードは次のとおりです。
$("#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の応答があります。これを修正するにはどうすればいいですか。
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の応答が得られます。