Admin-AJAX is not optimized for JSON. If you need your answer to be in JSON, use the REST-API instead. This API generates JSON response by default. All you have to do is to register a rest route, and access the URL: add_action( 'rest_api_init', function () { //Path to REST route and the callback function register_rest_route( 'scopeak/v2', '/my_request/', array( 'methods' => 'POST', 'callback' => 'my_json_response' ) ); }); Now, the callback function: function my_json_response(){ $args = array( 'orderby' => 'date', 'order' => $_POST['date'], 'post_type' => 'property', 'posts_per_page' => 20, 'date_query' => array( array( 'after' => $_POST['property_added'] ), ), ); $query = new WP_Query( $args ); if($query->have_posts()){ while($query->have_posts()){ $query->the_post(); $locations[]['name'] = get_the_title(); $locations[]['lat'] = get_field('loc_lng'); $locations[]['lng'] = get_field('loc_lat'); } } //Return the data return $locations; } Now, you can get your JSON response by visiting the following URL: wp-json/scopeak/v2/my_json_response/ For testing purposes, you can change `POST` method to `GET` and directly access this URL. If you get a response, then change it back to `POST` and work on your javascript. That's all.