There are multiple possible solutions here:
Debouncing
Only send the ajax call when the slider has stopped moving for a certain amount of time. This prevents rapid sending of ajax calls and guarantees that ajax calls are never sent with less than xx time between them. This type of behavior is common for handling scroll events when you can't update the state fast enough when scroll events come piling in too fast. Upon each event, this involves managing a timer that will be set when the slider has moved and then will fire if it stops moving for a certain amount of time and is reset every time the slider moves some more before the pause time elapses.
Single Ajax Call In-Flight At a Time
Sometimes, the desired behavior is that once you've sent an ajax call, you don't send another one until the current one is done. This generally involves keeping some sort of flag that indicates whether one of your ajax calls is already in flight. If you detect that the slider has moved, but an ajax call is in flight, you set another flag that says that an ajax call is pending. When each ajax call completes, it clears the inFlight flag and checks the pending flag to see if one more ajax call should be sent. Proper error handling is critical here so the inFlight flag can never get stuck.
Force the Ajax Responses into Proper Order
Because ajax calls are asynch, there is no guarantee that responses will be received in the same order as the requests were sent and this can sometimes mess up the results. If it's still desirable to send lots of the ajax events (so you don't want to use either of the previous options), but the results must be in proper order, then the results can be forced into proper order. This involves tagging each ajax request with some sort of sequence number and then queuing results that arrive out of order until they precedents arrive. This is fairly complicated and I would not recommend it if not absolutely required. The previous options are much simpler to implement.