| 
	
	
		
		
		
		
		 d_r_v, 
 вам необходимо разобратся с понятием асинхронности. 
в вашем примере в функции action() вы посылаете асинхронно два запроса, и в теле обработчика ответа выполняете код анимации. 
Это означает, что анимации будут выполнены не последовательно, и даже не обязательно паралельно. 
Если ответ на второй запрос придется сразу, а на первый - через 3 секунды, то сперва выполнится вторая анимация, а затем первая. 
 
Еще раз другими словами: 
$.post в вашем коде вызываются последовательно друг за другом. 
А вот соответствующие им function(data) юудут выполнены тогда, когда придет результат с сервера, а не сразу. Это и есть асинхронность. 
Более того, между вторым $.post и первым выполнившимся function(data) может пройти достаточно времени, и в это время может выоплнится еще что-нибудь(если есть чему) 
 
Более того, если в функцию travel передать аргумент более 1, то по-факту, вы посылаете сразу 4 и более запросов. 
И ответы могут прийти в ином порядке, чем вы послали запросы. А значит и анимации будут выполнены в ином от задуманного порядке. Возможно даже по нескольку паралельно 
 
alert же здесь играет ту роль,  что пока вы его не закроете, сервер продолжает работать, и с большой долей вероятности к моменту закрытия alert-а вами, запросы уже выполнятся, и будут готовы вызвать обработчик своего события, и тем самым достигается правильный порядок выполнения вашего кода 
 
В общем, вам надо переписать  логику своего приложения на асинхронную, а именно запускать анимацию, только после прихода обоих результатов, и только после анимации, запускать следующий travel 
 
Также вы можете избавится от асинхронности в $.post (см документацию), но учтите, что пока он выполняется в таком режиме, никакой другой код выполнятся не будет, и браузер "повиснет" на время запроса, что не очнеь красиво 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 |