is_single returns if there is a single page displayed within the actual server process. Within the Ajax-Function, nothing is "displayed", you're doing Ajax.
To check if the currently displayed object in your Browser is a single object, you need to transfer the information about this from the server process that serves your Browser to the server process that handles your ajax request.
Please try the following:
var is_single = <?php echo (is_single() ? '1' : '0' ); ?>;
If you're enqueueing your ajax-caller-script, you can use wp_localize_script .
Step 2: POST the is_single information to the Ajax Function
Step 3: Change your Ajax PHP Function to incorporate the is_single information:
$single = (int)$_POST['is_single'];
Step 4: Profit ;)