Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Ajax загрузка контента (не вопрос) (https://javascript.ru/forum/jquery/26970-ajax-zagruzka-kontenta-ne-vopros.html)

papochka 29.03.2012 20:43

Ajax загрузка контента (не вопрос)
 
Вдруг кому пригодится. Или кто предложит лучше...

Что предлагаю? Загрузку фрагмента страницы с помощью $.ajax - вместо load()
Подробнее Кликом на ссылку подгрузить в заранее оговоренный div контент любого div'a с другой страницы того же сайта.
Особенности CSS не предлагаю - на вкус и цвет. Ссылка, кликать на которую, должна быть в формате
<a class="loot" href="page.php" rel="victim"></a>
где page.php - адрес страницы-"донора" (откуда будем выдергивать div), а victim - ID нужного div'a (который конечно может быть любым - главное, чтобы вообще он был и чтобы он совпадал в атрибуте rel ссылки и в атрибуте id элемента-донора).
В примере фрагмент подгружается в div id="thief".

Кому нужен этот велосипед, вместо простого load()? Тем, кто столкнулся с проблемой конфликтов $.ajax и load - подробнее здесь

Код скрипта:

$('.loot').live("click", function(){
 var loaderImg = "<img src='loader.gif' alt='загрузка...' />"; // картинка до загрузки
 var url = $(this).attr("href"); // получаем значение атрибута href ссылки 
 var rel = 'div#'+$(this).attr("rel"); // получаем значение атрибута rel ссылки
 $("div#thief").html(loaderImg).html(function(){
 			var a=loaderImg;
			$.ajax({ // запрашиваем данные со страницы-донора
				url:url,
				dataType:"html",
				async:false,
				success:function(b){a=$(b).find(rel)},  // извлекаем html из нужного элемента (в примере <div id="victim">)
				error:function(){alert("Ajax!Ошибка.")}
				});
				return a
 });
 $("div#thief").fadeIn('fast'); // отображаем блок, если он был скрыт
 return false;
});


Для желающих поворчать: не надо ворчать, лучше предлагайте лучше.
Или оптимизируйте, - ибо я последнее время мало сплю (см.никнейм)

Тем, кому нужен метод load - см. здесь (внизу первого поста).

Спасибо за внимание.

atlantis 29.03.2012 21:13

Если не ошибаюсь, то "return a" (14 строка) возвратит результат до завершения работы ajax запроса. Следовательно код не будет работать так как нужно.

papochka 30.03.2012 09:00

тем не менее это работает.
странные комментарии... неужели здесь практикуется публиковать коды, не проверив их работоспособность? вы раните меня в самое сердце...

зы: только вот похоже html(loaderImg) здесь пятая нога... ну и loaderImg в принципе.

melky 30.03.2012 10:10

там всё нормально, запрос ведь синхронный (async:false )

можно сделать его асинхронным вот так :

var loaderImg = '<img src="loader.gif" alt="загрузка..." />';

$('.loot').live("click", function() {
    var 
        $this = $(this);
      
    $.ajax({ 
        url: $this.attr("href"),
        dataType: "html",
        context: $("#thief").html(loaderImg),
        success: function(b) {
            b = $(b).find('#'+$this.attr('rel'));
            this.html(b).fadeIn('fast')
        }
    });
           
    return false;
});​

atlantis 30.03.2012 12:04

melky,
Ой, точно. Не заметил "async:false".
Тогда всё работает :)
Я правда никогда не использовал "async:false" и не рекомендую использовать. ЗЫ Это лично моё мнение.

papochka 30.03.2012 12:54

atlantis,
melky (спасибо),
не втему, но раз уж вы об этом заговорили - можно поделиться человеческим разъяснением преимущества синхронного запроса перед асинхронным или ссылки на такое человеческое разъяснение. До сих пор не врублюсь что такое хорошо, а что такое плохо, кроме того, что при синхронном обещают зависание браузера :)
Чем плоха идея "занятся чем-то другим во время запроса"? Имеется в виду, что асинхронный может вести себя неадекватно при хреновом соединении? или что?

T-sh 30.03.2012 13:03

Цитата:

Сообщение от papochka (Сообщение 165681)
atlantis,
melky (спасибо),
не втему, но раз уж вы об этом заговорили - можно поделиться человеческим разъяснением преимущества синхронного запроса перед асинхронным или ссылки на такое человеческое разъяснение. До сих пор не врублюсь что такое хорошо, а что такое плохо, кроме того, что при синхронном обещают зависание браузера :)
Чем плоха идея "занятся чем-то другим во время запроса"? Имеется в виду, что асинхронный может вести себя неадекватно при хреновом соединении? или что?

синхронный: отправили запрос -> ждем ответа и ничего не делаем -> пришел ответ —продолжаем.

асинхронный: отправили запрос -> делаем что хотим -> пришел ответ — обработали.

papochka 30.03.2012 17:08

Видимо превосходство синхронного запроса таится именно в
Цитата:

и ничего не делаем
, что по сравнению с
Цитата:

делаем что хотим
даже для меня существенно слаще... :)

Я не хочу много зарабатывать, я хочу много получать!

T-sh 30.03.2012 17:39

Цитата:

Сообщение от papochka (Сообщение 165751)
Видимо превосходство синхронного запроса таится именно в , что по сравнению с даже для меня существенно слаще... :)

Я не хочу много зарабатывать, я хочу много получать!

всё зависит от цели :)

бывает, что на одной странице пять-шесть ajax подгрузок, и тогда синхронный запрос — вообще ни вариант :)

а в целом, оба варианта не лучше и не хуже друг друга :)

melky 30.03.2012 20:57

Цитата:

Сообщение от papochka (Сообщение 165681)
atlantis,
melky (спасибо),
не втему, но раз уж вы об этом заговорили - можно поделиться человеческим разъяснением преимущества синхронного запроса перед асинхронным или ссылки на такое человеческое разъяснение. До сих пор не врублюсь что такое хорошо, а что такое плохо, кроме того, что при синхронном обещают зависание браузера :)
Чем плоха идея "занятся чем-то другим во время запроса"? Имеется в виду, что асинхронный может вести себя неадекватно при хреновом соединении? или что?

синхронный запрос замораживает интерфейс на время совершения (будет такой тормозок, как в играх), асинхронный - нет


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