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 - см. здесь (внизу первого поста). Спасибо за внимание. |
Если не ошибаюсь, то "return a" (14 строка) возвратит результат до завершения работы ajax запроса. Следовательно код не будет работать так как нужно.
|
тем не менее это работает.
странные комментарии... неужели здесь практикуется публиковать коды, не проверив их работоспособность? вы раните меня в самое сердце... зы: только вот похоже html(loaderImg) здесь пятая нога... ну и loaderImg в принципе. |
там всё нормально, запрос ведь синхронный (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; }); |
melky,
Ой, точно. Не заметил "async:false". Тогда всё работает :) Я правда никогда не использовал "async:false" и не рекомендую использовать. ЗЫ Это лично моё мнение. |
atlantis,
melky (спасибо), не втему, но раз уж вы об этом заговорили - можно поделиться человеческим разъяснением преимущества синхронного запроса перед асинхронным или ссылки на такое человеческое разъяснение. До сих пор не врублюсь что такое хорошо, а что такое плохо, кроме того, что при синхронном обещают зависание браузера :) Чем плоха идея "занятся чем-то другим во время запроса"? Имеется в виду, что асинхронный может вести себя неадекватно при хреновом соединении? или что? |
Цитата:
асинхронный: отправили запрос -> делаем что хотим -> пришел ответ — обработали. |
Видимо превосходство синхронного запроса таится именно в
Цитата:
Цитата:
Я не хочу много зарабатывать, я хочу много получать! |
Цитата:
бывает, что на одной странице пять-шесть ajax подгрузок, и тогда синхронный запрос — вообще ни вариант :) а в целом, оба варианта не лучше и не хуже друг друга :) |
Цитата:
|
Часовой пояс GMT +3, время: 10:09. |