Fetching posts from wordpress function in ajax

If you read the documentation for locate_template you’ll see the problem.

locate_template( $template_names, $load, $require_once );

$require_once
(boolean) (optional) If true, the template file will be loaded with the php require_once function. If false, the template file will be loaded with the php require function. This parameter has no effect if $load is false.
Default: true

PHP won’t load your template more than once because you’ve set $require_once to true.

A simpler API function for this purpose is get_template_part:

get_template_part( 'post' );