Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2011, 14:53
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

страница строится быстрее чем думает ajax
Доброго времени.
Впервые начинаю использовать аякс. У меня есть пару вопросов, наверное глупых. Прошу понять и простить.

function loadPage(sum){
	var barArray;
	$.ajax({
		type: "POST",
		url: "/any.php",
		data: 'sum='+sum,
		success: function(msg){
			barArray = msg;
			alert(msg);// алерт 1
		},
		error: function(){
			
		}
	});
	return barArray;
}

var dataReturn = loadPage(sumBlockCount);
alert(dataReturn);// алерт 2


Проблема в том, что в обычном яваскрипте по идее сначала должен вылезти алерт 1, а потом уже алерт 2.

Именно так мне и надо.
Но тут все по другому - сначала вылезает пустой алерт 2, а только потом алерт 1 внутри аякс функции.

С этой проблемой связано много косяков на сайте. Подскажите способ, как ее предотвратить.

Последний раз редактировалось shaltay, 04.08.2011 в 14:56.
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2011, 14:56
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от shaltay
Проблема в том, что в обычном яваскрипте по идее сначала должен вылезти алерт внутри функции loadPage, а потом уже алерт в самом низу.

Именно так мне и надо.
Но тут все по другому - сначала вылезает пустой алерт нихний, а только потом внутри аякс функции.

С этой проблемой связано много косяков на сайте. Подскажите способ, как ее предотвратить.
прочитать про разницу между синхронными и асинхронными запросами аякс
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2011, 16:56
Кандидат Javascript-наук
Отправить личное сообщение для shaltay Посмотреть профиль Найти все сообщения от shaltay
 
Регистрация: 28.02.2011
Сообщений: 134

Огромное спасибо
Проблема решилась только добавлением async: false,
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2011, 17:06
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от shaltay Посмотреть сообщение
Проблема решилась только добавлением async: false,
Плохое решение, синхронные запросы тормозят браузер (он как бы подвисает), багают и вообще не кашерно выглядят

Если пугает асинхронная логика, то смотри в сторону Deferred, тем более на jQuery там совсем всё просто)

Например:
$.when($.ajax{ /* тут тело нашего запроса */ }).then(function() { /* а этот код выполнится только тогда, когда прибежит ответ от сервера*/ });
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 04.08.2011 в 17:15.
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2011, 17:08
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

shaltay,
а что мешает в самой success функции выполнять необходимые действия с результатом ?
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #6 (permalink)  
Старый 04.08.2011, 17:13
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от walik Посмотреть сообщение
shaltay,
а что мешает в самой success функции выполнять необходимые действия с результатом ?
Новички очень боятся callback функций Я когда своим студентам в универе рассказывал про AJAX они постоянно путались и заглядывались на синхронные запросы
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск