Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   страница строится быстрее чем думает ajax (https://javascript.ru/forum/jquery/19448-stranica-stroitsya-bystree-chem-dumaet-ajax.html)

shaltay 04.08.2011 14:53

страница строится быстрее чем думает 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 внутри аякс функции.

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

dmitriymar 04.08.2011 14:56

Цитата:

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

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

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

прочитать про разницу между синхронными и асинхронными запросами аякс

shaltay 04.08.2011 16:56

Огромное спасибо :)
Проблема решилась только добавлением async: false,

kobezzza 04.08.2011 17:06

Цитата:

Сообщение от shaltay (Сообщение 117293)
Проблема решилась только добавлением async: false,

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

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

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

walik 04.08.2011 17:08

shaltay,
а что мешает в самой success функции выполнять необходимые действия с результатом ?

kobezzza 04.08.2011 17:13

Цитата:

Сообщение от walik (Сообщение 117297)
shaltay,
а что мешает в самой success функции выполнять необходимые действия с результатом ?

Новички очень боятся callback функций:) Я когда своим студентам в универе рассказывал про AJAX они постоянно путались и заглядывались на синхронные запросы:)


Часовой пояс GMT +3, время: 23:19.