duplicate posts with ajax load more wordpress

Firstly your cat parameter expects an array and you’re passing a json string to it… You need to json_decode back your array of posts to run through the query.

Secondly, you are using query_posts() which if you look at the codex page reads:

Note: This function will completely override the main query and isn’t intended for use by plugins or themes. Its overly-simplistic approach to modifying the main query can be problematic and should be avoided wherever possible. In most cases, there are better, more performant options for modifying the main query such as via the ‘pre_get_posts’ action within WP_Query.

This must not be used within the WordPress Loop.

So, fix the cat issues and use get_posts() or WP_Query here and I’d be very surprised if you still have issues.