Jquery уроки примеры. Впечатляющие анимационные эффекты. Получение json-данных с помощью getJSON
Давайте начнем этот список с очень популярного и полезного сниппета: эти 4 строки кода позволят вашим посетителям плавно проскролить страницу к верху простым нажатием ссылки (с id #top) расположенной внизу страницы.
$("a").click(function() { $("html, body").animate({ scrollTop: 0 }, "slow"); return false; });
Дублирование thead в самый низ html таблицыДля лучшей читаемости таблиц было бы неплохо скопировать шапку таблицы в низ таблицы. Собственно, это и делает следующий сниппет.
Var $tfoot = $(""); $($("thead").clone(true, true).children().get().reverse()).each(function() { $tfoot.append($(this)); }); $tfoot.insertAfter("table thead");
Загрузка внешнего контентаВам нужно добавить определенный внешний контент в div? Так вот это очень просто сделать с jQuery, как показано в нижеприведенном примере.
$("#content").load("somefile.html", function(response, status, xhr) { // error handling if(status == "error") { $("#content").html("An error occured: " + xhr.status + " " + xhr.statusText); } });
Колонки одинаковой высотыВ случае использования колонок для отображения контента вашего сайта, определенно будет смотреться лучше, если у колонок будет одинаковая высота. Код ниже возьмет все div элементы с классом.col и установит их высоту по самому высокому элементу. Супер полезно!
Var maxheight = 0; $("div.col").each(function() { if($(this).height() > maxheight) { maxheight = $(this).height(); } }); $("div.col").height(maxheight);
Табличные полосы (зебра)Когда данные отображаются в виде таблицы, отличающиеся цвета в каждой строке однозначно повышают читаемость. Вот сниппет для автоматического добавления CSS класса в каждую вторую(четную) строку таблицы.
$(document).ready(function(){ $("table tr:even").addClass("stripe"); });
Частичное обновление страницыЕсли вам нужно обновить только часть страницы, то эти 3 строки кода точно помогут. В примере div с id #refresh автоматически обновляется каждые 10 секунд.
SetInterval(function() { $("#refresh").load(location.href+" #refresh>*",""); }, 10000); // milliseconds to wait
Предзагрузка изображенийjQuery упрощает предзагрузку изображений в фоне, так что посетителям не придется ждать целую вечность, когда появятся желаемые изображения. Код готов к использованию, просто отредактируйте список изоборажений в строке 8.
$.preloadImages = function() { for(var i = 0; i maxWidth){ ratio = maxWidth / width; $(this).css("width", maxWidth); $(this).css("height", height * ratio); height = height * ratio; } var width = $(this).width(); var height = $(this).height(); if(height > maxHeight){ ratio = maxHeight / height; $(this).css("height", maxHeight); $(this).css("width", width * ratio); width = width * ratio; } }); //$("#contentpage img").show(); // IMAGE RESIZE });
Автоматическая загрузка контента по скроллуНекоторые сайты, такие как Twitter загружают контент по скроллу. Это значит, что весь контент динамически подгружается на странице в процессе прокрутки вниз. Вот пример того, как вы можете сделать этот эффект на вашем сайте.
Var loading = false; $(window).scroll(function(){ if((($(window).scrollTop()+$(window).height())+250)>=$(document).height()){ if(loading == false){ loading = true; $("#loadingbar").css("display","block"); $.get("load.php?start="+$("#loaded_max").val(), function(loaded){ $("body").append(loaded); $("#loaded_max").val(parseInt($("#loaded_max").val())+50); $("#loadingbar").css("display","none"); loading = false; }); } } }); $(document).ready(function() { $("#loaded_max").val(50); });
Проверить, загрузилось ли изображениеВот сниппет, который я часто использую при работе с изображениями, потому что, это лучший способ узнать, загрузилось изображение или нет.
Var imgsrc = "img/image1.png"; $("").load(function () { alert("image loaded"); }).error(function () { alert("error loading image"); }).attr("src", imgsrc);
Сортировка списка в алфавитном порядкеВ некоторых случаях бывает очень полезна сортировка длинного списка в алфавитном порядке. Данный сниппет принимает любой список и сортирует его.
$(function() { $.fn.sortList = function() { var mylist = $(this); var listitems = $("li", mylist).get(); listitems.sort(function(a, b) { var compA = $(a).text().toUpperCase(); var compB = $(b).text().toUpperCase(); return (compA < compB) ? -1: 1; }); $.each(listitems, function(i, itm) { mylist.append(itm); }); } $("ul#demoOne").sortList(); });
JQuery – это замечательный JavaScript Framework, который подкупает своей простотой в понимании и удобством в использовании. Но изучение надо с чего-то начинать, и лично моё мнение – лучше всего начинать с наглядных примеров, и они далее…
Материалы данной статьи включены в учебник « ». Учебник распространяется бесплатно, и сопровождается интерактивными .
Как же все-таки работает jQuery?Ну для начала Вам понадобится сам фреймворк, его вы сможете скачать с домашней страницы проекта , затем проинициализировать:
А основные моменты Вам поможет понять следующая диаграмма:
Как получить элемент с помощью jQuery?Для того чтобы понимать как работает селектор Вам все-же необходимы базовые знания CSS, т.к. именно от принципов CSS отталкивается селектор jQuery:
- $(“#header”) – получение элемента с id=”header”
- $(“h3”) – получить все элементы
- $(“div#content .photo”) – получить все элементы с классом =”photo” которые находятся в элементе div с id=”content”
- $(“ul li”) – получить все
- элементы из списка
- $(“ul li:first”) – получить только первый элемент
- из списка Выдвижная панель
Начнем с простенького примера – слайд-панель, она у нас будет двигаться вверх/вниз по клику на ссылке (см. )
Реализуем это следующим образом, по клику на ссылку, у нас будет переключаться её класс (между “active” и “btn-slide”), а панелька с id=”panel” будет выдвигаться/прятаться. (класс “active” изменяет позицию фонового изображения, см. CSS файл во вложении).$(document).ready(function(){ $(".btn-slide").click(function(){ $("#panel").slideToggle("slow"); $(this).toggleClass("active"); }); });
Магические исчезновенияЭтот пример покажет как можно красиво и легко убирать растворять элементы (см. ):
Когда мы кликаем по картинке , будет найден родительский элемент , и его прозрачность будет медленно изменяться от opacity= 1.0 до opacity=hide:
$(document).ready(function(){ $(".pane .delete").click(function(){ $(this).parents(".pane").animate({ opacity: "hide" }, "slow"); }); });
Связанная анимацияТеперь пример посложнее, но он поможет Вам лучше понять jQuery. Всего несколько строк кода заставят квадрат двигаться, изменять размер и прозрачность. (см. ):
Line 0: когда прогрузилась страница (DOM готов к манипуляциям)
Line 1: привязываемся к событию click для элемента
Line 2: манипулируем элементом – уменьшаем его прозрачность до 0.1, наращиваем позицию left еще на 400px, со скоростью 1200 (milliseconds)
Line 3: затем медленно изменяем следующие параметры: opacity=0.4, top=160px, height=20, width=20; скорость анимации указывается вторым параметром: “slow”, “normal”, “fast” или в миллисекундах
Line 4: затем opacity=1, left=0, height=100, width=100, скорость – “slow”
Line 5: затем top=0, скорость – “fast”
Line 6: затем slideUp (с дефолтной скоростью анимации – “normal”)
Line 7: затем slideDown, скорость – “slow”
Line 8: возвращаем false для того чтобы браузер не перешел по ссылке$(document).ready(function(){ $(".run").click(function(){ $("#box").animate({opacity: "0.1", left: "+=400"}, 1200) .animate({opacity: "0.4", top: "+=160", height: "20", width: "20"}, "slow") .animate({opacity: "1", left: "0", height: "100", width: "100"}, "slow") .animate({top: "0"}, "fast") .slideUp() .slideDown("slow") return false; }); });
Гармошка #1Пример реализации “гармошки”. (см. )
Теперь приступим к разбору полетов:
Первой строчкой мы добавляем класс “active” первому элементу внутри (класс”active” отвечает за позиционирования фонового рисунка – иконки со стрелочкой). Во второй строчке мы прячем все не первыеЭлементы внутри .
Когда происходит клик по заголовку , для следующего в нём элементаБудет применен эффект slideToggle, затем для всех остальных элементов
Будет применен эффект slideUp. Следующие действие изменяет класс заголовка на “active”, затем ищем все остальные заголовки и убираем у них класс “active”
$(document).ready(function(){ $(".accordion h3:first").addClass("active"); $(".accordion p:not(:first)").hide(); $(".accordion h3").click(function(){ $(this).next("p").slideToggle("slow") .siblings("p:visible").slideUp("slow"); $(this).toggleClass("active"); $(this).siblings("h3").removeClass("active"); }); });
Гармошка #2Этот пример схож с предыдущим, лишь отличается тем, что мы указываем открытую по умолчанию панельку. (см. )
В CSS у нас указано для всех элементов
Display:none. Теперь нам необходимо открыть третью панель. Для этого мы можем написать следующее $(“.accordion2 p”).eq(2).show(), где eq обозначает равенство. Помните, что индексирование начинается с нуля:
$(document).ready(function(){ $(".accordion2 h3").eq(2).addClass("active"); $(".accordion2 p").eq(2).show(); $(".accordion2 h3").click(function(){ $(this).next("p").slideToggle("slow") .siblings("p:visible").slideUp("slow"); $(this).toggleClass("active"); $(this).siblings("h3").removeClass("active"); }); });
Анимация для события hover #1Данный пример поможет создать Вам очень красивую анимацию для события hover (надеюсь, Вы знаете что это ?), (см. ):
Когда Вы наводите мышкой на элемент меню (mouseover), происходит поиск следующего элемента , и анимируется его прозрачность и расположение:
$(document).ready(function(){ $(".menu a").hover(function() { $(this).next("em").animate({opacity: "show", top: "-75"}, "slow"); }, function() { $(this).next("em").animate({opacity: "hide", top: "-85"}, "fast"); }); });
Анимация для события hover #2Данный пример чуть-чуть посложней предыдущего примера: для формирования подсказки используется атрибут linktitle (см. )
Первым делом добавим тэг в каждый элемент . Когда произойдет событие mouseover, мы возьмем текст из атрибута “thetitle” и сохраним его в переменной “hoverText”, затем этот текст будет вставлен в тэг :$(document).ready(function(){ $(".menu2 a").append(""); $(".menu2 a").hover(function() { $(this).find("em").animate({opacity: "show", top: "-75"}, "slow"); var hoverText = $(this).attr("title"); $(this).find("em").text(hoverText); }, function() { $(this).find("em").animate({opacity: "hide", top: "-85"}, "fast"); }); });
Кликабельные блокиЭтот пример демонстрирует как сделать кликабельным блок с текстом, а не только ссылку (см. ):
Создадим список- с классом class=”pane-list” и мы хотим сделать элементы
- кликабельными. Для начала привяжемся к событию click для элемента “.pane-list li”; когда пользователь будет кликать по элементу списка, наша функция произведет поиск тэга и сделает редирект на страницу указанную в атрибуте href.
$(document).ready(function(){ $(".pane-list li").click(function(){ window.location=$(this).find("a").attr("href"); return false; }); });
Складывающиеся панелькиНу а теперь чуть-чуть скомбинируем предыдущие примеры и создадим ряд складывающихся панелек (наподобие как в Gmail организован inbox). (см. )
- скрываем все элементы после первого.
- скрываем все элементы
- после пятого
- клик по
- клик по
- клик по , так же вызывается метод slideDown для всех
- послепятого
- клик по – скрывает элемент, и отображает
Я думаю многие из читателей сталкивались с админской частью wordpress’a, точнее с редактирование комментариев. Попробуем сделать что-то подобное. Для анимации фонового цвета нам понадобиться соответствующий плагин для jQuery . (см. )
- добавим класс “alt” к каждому чётному элементу (данный класс изменяет цвет фона элемента)
- клик по инициирует появление сообщения (alert), так же происходит анимация фонового цвета и прозрачности (backgroundColor и opacity) для
- клик по – вызывает анимацию фона у (цвет изменяется на желтый и обратно) и добавляет класс “spam”
- клик по – вызывает анимацию фона у (цвет изменяется на зеленый и обратно) и удаляет класс “spam”
- клик по – вызывает анимацию фона у (цвет изменяется на красный), и изменяет параметр “opacity” на “hide”
Простейший пример реализации галереи, без перезагрузки страницы. (см. )
Для начала добавим тэг в заголовки
По клику на изображения вВыполняем следующие действия.
Наверняка, Вы слышали о прекрасной библиотеке Javascript под названием jQuery. Что же такое на самом деле jQuery?
Как облегчить жизнь веб-разработчика? С чего начать? jQuery делает написание Javascript интересным и более простым. С помощью этой библиотеки многие достаточно сложные аспекты Javascript можно легко внедрить в любые приложения.
Сегодняшний наш урок расскажет о том, как начать работу с jQuery и как написать свой первый скрипт.
Что же такое jQuery?
jQuery очень легкая библиотека Javascript (некоторые называют ее фреймворком), которая избавляет от головной боли при написании Javascript кода. У нее много очень мощных возможностей, как например: отслеживание DOM, добавление красивых эффектов и анимаций к элементам, супер простые Ajax техники и методы. На главной странице сайта jQuery наиболее точное, на мой взгляд, описание:
jQuery быстрая и лаконичная библиотека, которая упрощает обработку событий, анимацию и взаимодействие с Ajax для более быстрой веб разработки. jQuery разработан для того, чтобы изменить методы написания JavaScript кода.
Какие преимущества jQuery?
Давайте коротко пройдемся по некоторым преимуществам и свойствам данного фреймворка:
Существенно уменьшается количество кода (необходимого для работы скрипта) по сравнению с JavaScript, что в свою очередь означает меньше временных затрат и более читабельный код. Далее в статье будут рассмотрены некоторые примеры.
Намного проще понять код (в отличии от JavaScript). В нашем мире, чем скорее Вы закончите процесс программирования, тем больше времени сможете уделить другим целям.
Очень удобная документация и активное комьюнити, готовое всегда оказать помощь при необходимости.
Использование Ajax становится намного проще. Вам потребуется всего 5 строк кода (иногда меньше) для создания простого Ajax запроса.
Огромное количество плагинов, с помощью которых можно сделать практически все что угодно.
С jQuery весело:)
Как начать?
Первым делом Вам необходимо посетить главную страницу официального сайта jQuery и скачать наиболее свежую версию данного фреймворка. После загрузки необходимо закачать этот файл к себе на хостинг, и в шапке документа прописать ссылку на этот файл.
В качестве альтернативы, можно воспользоваться помощью великого Гугла и поставить ссылку на их сервер, где находятся всегда свежие версии любых фреймворков. Необходимую ссылку можно найти .
Готов ли документ?
Для выполнения нашего первого jQuery скрипта, нам необходимо поместить весь наш скрипт в функцию. Эта функция будет выполнена при полной готовности DOM (когда "документ будет готов" - дословный перевод с англ.). Заметьте, что это очень похоже на популярное событие ‘onload’, но не является тем же самым. Давайте взглянем на пример:
$(document).ready(function(){ //Code here });
Выше мы говорим jQuery выполнить любой код внутри функции, при полной готовности DOM.В этом есть свои преимущества, несмотря на то, что может быть многим не понятно. Прежде всего, используя данную технику, мы полностью разделяем Javascript от HTML. Во-вторых, нам нет необходимости ждать полной загрузки страницы, достаточно загрузки DOM.
Для ленивых кодеров, или для тех, у кого каждый символ на счету, можно еще сократить код выше:
$(function(){ //Code here });
Ваш первый скрипт jQuery
Мы уже знаем, как ссылаться на библиотеку. Также нам немного понятна функция document.ready. Теперь пришло время написать простейший скрипт.
Давайте сделаем его максимально простым. Для данного примера, давайте сделаем страницу с текстом и цитатой в конце. Мы хотим показывать цитату, только если пользователь нажмет на кнопку. Взгляните ниже на необходимый для этого код:
$(document).ready(function(){
var myQuote = $("#my_quote");
myQuote.hide();
$(".button").click(function(){
myQuote.show(500);
});
});Давайте детально рассмотрим весь код.
Как говорилось выше, мы помещаем весь код к выполнению внутри функции $document.ready().
Мы присваеваем id нашей цитаты (my_quote) переменную myQuote. Теперь у нас есть доступ к цитате с id my_quote.
Вот и все. При нажатии на кнопку в течении 0.5 секунды будет показана цитата. Очень легко, не правда ли?
Продолжение следует....
Спасибо за внимание! Всего наилучшего!
jQuery — это библиотека JavaScript, которая позволяет веб-разработчикам добавлять дополнительные функции на свои веб-сайты. Она доступна с и предоставляется бесплатно по лицензии MIT. В последние годы jQuery стала самой востребованной библиотекой JavaScript, используемой в веб-разработке.
Пример jQueryЧтобы реализовать jQuery, веб-разработчику нужно сослаться на JavaScript-файл в HTML-коде веб-страницы. На некоторых веб-сайтах размещается собственная локальная копия, в то время как другие просто ссылаются на библиотеку, размещенную Google или сервером. Например, веб-страница может загружать библиотеку jQuery, используя следующую строку в разделе HTML (пример jQuery и cookie):
Примеры jQuery и AjaxПосле загрузки библиотеки веб-страница может вызывать любую функцию, поддерживаемую библиотекой. Общие примеры включают в себя изменение текста, обработку данных формы, перемещение элементов на странице и выполнение анимаций. jQuery также может работать с Ajax-кодом и такими как PHP и ASP, для доступа к данным из базы данных. Поскольку jQuery выполняется на стороне клиента (а не на веб-сервере), она может обновлять информацию на веб-странице в реальном времени, не перезагружая страницу. Общим примером является автозаполнение, в котором форма поиска автоматически отображает общие данные при вводе запроса.
Преимущества библиотекиПомимо бесплатной лицензии, другой основной причиной, по которой jQuery завоевала такую популярность, является ее кросс-браузерная совместимость. Поскольку каждый браузер отображает и JavaScript по-разному, веб-разработчику может быть сложно сделать веб-сайт одинаковым во всех браузерах. Вместо того, чтобы писать пользовательские функции для каждого браузера, веб-разработчик может использовать одну функцию jQuery, которая будет работать в Chrome, Safari, Firefox и Internet Explorer. Поддержка нескольких браузеров заставила многих разработчиков перейти от стандартного JavaScript к jQuery, поскольку это значительно упрощает процесс кодирования.
ОписаниеСинтаксис jQuery используется для упрощения навигации по документу, выбора элементов DOM, создания анимаций, обработки событий и разработки приложений Ajax. jQuery также предоставляет разработчикам возможность создавать плагины поверх библиотеки JavaScript. Это позволяет программистам создавать абстрактные конструкции для взаимодействия и анимации на низком уровне, расширенные эффекты и высокоуровневые, тематические виджеты. Модульный подход к библиотеке jQuery позволяет создавать мощные динамические веб-страницы и веб-приложения.
Набор основных функций:
- выбор элементов DOM;
- обход и манипуляция с помощью механизма выбора;
- новый стиль программирования;
- алгоритмы слияния и структуры данных DOM.
Стиль повлиял на архитектуру других фреймворков JavaScript, таких как YUI v3 и Dojo, а также стимулировал создание стандартного API Selectors.
Microsoft и Nokia поставляют jQuery на своих платформах. Microsoft включает его с Visual Studio для использования в рамках ASP.NET AJAX и ASP.NET MVC, а Nokia интегрировала его в платформу разработки виджета веб-времени.
ОбзорjQuery представляет собой библиотеку элементов с объектной моделью документов (DOM). DOM представляет собой представление древовидной структуры всех элементов веб-страницы. jQuery упрощает синтаксис для поиска, выбора и управления этими элементами DOM. Библиотека может использоваться для поиска элемента в документе с определенным свойством (например, всех элементов с тегом h1), изменения одного или нескольких его атрибутов (цвета, видимости) или принятия ответа на событие (например, щелчком мыши).
РазработкаБиблиотека использует такие востребованные функции JavaScript, как fade ins и fade outs при скрытии элементов, анимации и работе с элементами jQuery CSS. jQuery также предоставляет парадигму для обработки событий, которая выходит за рамки выбора и манипуляции элементами DOM. Назначение события и определение функции обратного вызова выполняются одним шагом в одном месте в коде.
Принципы разработки с помощью jQuery (примеры):
- Разделение JavaScript и HTML — библиотека предоставляет простой синтаксис для добавления обработчиков событий в DOM с использованием JavaScript, вместо добавления атрибутов событий HTML для вызова функций JS. Таким образом, он поощряет разработчиков полностью отделять код JavaScript от разметки HTML.
- Краткость и ясность — способствует краткости и ясности с такими инструментами, как цепочки и сокращенные имена функций.
- Устранение кросс-браузерных несовместимостей — JavaScript-движки разных браузеров немного отличаются, поэтому код JS, который работает для одного браузера, может не работать для другого. Подобно другим инструментариям JavaScript, jQuery обрабатывает все эти кросс-браузерные несоответствия и обеспечивает согласованный интерфейс, который работает в разных браузерах.
- Расширяемость — новые события, элементы и методы могут быть легко добавлены, а затем повторно использованы как плагин.
jQuery был первоначально выпущен в январе 2006 года в BarCamp NYC Джоном Ресигом и находился под влиянием ранней библиотеки cssQuery Дина Эдвардса. В настоящее время он поддерживается командой разработчиков под руководством Тимми Уиллисона (с движком селектора jQuery — Sizzle, которым руководит Ричард Гибсон).
ОсобенностиБиблиотека включает в себя следующие функции:
- выбор элементов DOM с использованием многосерверного механизма селектора с открытым исходным кодом Sizzle;
- выделение проекта DOM-манипуляции на основе селекторов CSS, которая использует имена и атрибуты элементов, такие как id и class, как критерии для выбора узлов в DOM;
- мероприятия;
- эффекты и анимации;
- ajax;
- объекты отложенных и обещающих для контроля асинхронной обработки;
- разбор JSON;
- расширяемость через плагины;
- утилиты, такие как обнаружение функций;
- способы совместимости, которые изначально доступны в современных браузерах, но нуждаются в более ранних версиях, таких как inArray () и each (), мульти-браузер (не путать с кросс-браузером).
Библиотека jQuery представляет собой один файл JavaScript, содержащий все его общие функции DOM, события, эффекты и Ajax. Он может быть включен в веб-страницу путем ссылки на локальную копию или на одну из многочисленных копий, доступных на общедоступных серверах. Библиотека имеет сеть доставки контента (CDN), размещенную MaxCDN.
Пример jQuery в PHP:
СтилиjQuery имеет два стиля использования:
- Через функцию $, которая является фабричным методом для объекта jQuery. Эти функции, часто называемые командами, являются целыми, поскольку все они возвращают объекты jQuery.
- Через $ — префиксные функции. Это служебные функции, которые напрямую не действуют на объект.
Доступ к JQuery и управлеие несколькими узлами DOM обычно начинается с вызова функции $ с помощью строки Это возвращает объект jQuery, ссылающийся на все соответствующие элементы на странице HTML.
Бесконфликтный режимjQuery включает режим.noConflict (), который освобождает управление функцией $. Это полезно, если jQuery используется с другими библиотеками, которые также используют $ в качестве идентификатора. В режиме без конфликтов разработчики могут использовать библиотеки в качестве замены $ без потери функциональности.
Расширенный функционалФункции обратного вызова для обработки событий на элементах, которые еще не загружены, могут быть зарегистрированы внутри.ready () как анонимные функции. Эти обработчики будут вызываться только при срабатывании события. Например, следующий код добавляет обработчик для щелчка мыши на элемент изображения img:
$("img").on("click",function(){
//обрабатываем событие click на любом элементе img на странице
Некоторые функции возвращают определенные значения (например, $("#input-user-email").Val()). В этих случаях цепочка не работает, поскольку значение не ссылается на объект jQuery.
Создание новых элементовПомимо доступа к узлам DOM через иерархию объектов, также возможно создавать новые элементы, если строка, переданная как аргумент в $ (), выглядит как HTML. Например, строка находит элемент выбора HTML с идентификационными картами и добавляет элемент опции со значением VAG и текст Volkswagen:
$("# выберите carmakes")
Append($("")
Attr({значение:VAG})
Append (Volkswagen)).
УтилитыФункции jQuery с префиксом $ являются функциями полезности, которые влияют на глобальные свойства и поведение. В следующем примере используется функция each (), которая выполняет итерацию через массивы:
$.each(,function(){
console.log(это+1);
Данный пример post jQuery записывает 2, 3, 4 на консоль.
AjaxМожно выполнять Ajax с использованием $ .ajax () jQuery, примером которого могут служить связанные методы для загрузки и обработки удаленных данных:
url: "/process/submit.php",
имя: Джон,
местоположение: "Бостон",
}).done(function(msg){
alert("Data Saved:"+msg);
}).fail(function(xmlHttpRequest, statusText, errorThrown){
оповещение(
"Не удалось отправить ваше сообщение.\N\n"
+"XML Http Request:"+JSON.stringify(xmlHttpRequest)
+ ",\nStatus Текст:"+statusText
+ ",\nError Thrown:"+errorThrown);
В этом примере на сервере указано имя данных=John и location=Boston для /process/submit.php. Когда этот запрос завершается, функция вызывается, чтобы предупредить пользователя. Если запрос не удался, он предупредит пользователя об ошибке, состоянии запроса и конкретной ошибке.
ПлагиныАрхитектура jQuery позволяет разработчикам создавать подключаемый код для расширения различных функций. В интернете доступны тысячи подключаемых модулей, которые охватывают целый ряд функций, таких как помощники Ajax, веб-службы, динамические списки, инструменты XML и XSLT, перетаскивание, события, обработка файлов cookie и модальные окна.
Существуют альтернативные плагины для поисковых систем, такие как jquer.in, которые используют более специализированные подходы, такие как перечисление только плагинов, соответствующих определенным критериям (например, те, у которых есть общедоступный репозиторий кода). Разработчик предоставляет «Центр обучения» — ресурс jQuery для начинающих, который может помочь пользователям понять JavaScript и приступить к разработке плагинов.
jQuery UIjQuery UI представляет собой набор виджетов GUI, анимированных визуальных эффектов и тем, реализованных с помощью jQuery CSS (библиотеки JavaScript), каскадных таблиц стилей и HTML. Согласно службе аналитики JavaScript, Libscore, пользовательский интерфейс jQuery используется на более чем 197000 лучших веб-сайтах, что делает его второй по популярности библиотекой JS. Самые известные из них: Pinterest, PayPal, IMDb, The Huffington Post и Netflix.
jQuery UI являются бесплатным и открытым исходным кодом, распространяемым Foundation под лицензией MIT. Был впервые опубликован в сентябре 2007 года.
jQuery MobilejQuery Mobile — это веб-инфраструктура с сенсорной оптимизацией (также известная как мобильная инфраструктура). Основное внимание в разработке уделяется созданию инфраструктуры, совместимой с широким спектром смартфонов и планшетных компьютеров, необходимой для растущего рынка диджитал-техники. Совместим с другими платформами мобильных приложений такими, как PhoneGap, Worklight и многими другими.
В этой статье примеры кода, которые я использую, для отправки ajax-запросов к серверу через jQuery. Их задачи могут быть разными, поэтому под них можно использовать разные функции, которые упрощают написание кода.
Запрос html-данных с помощью функции LoadЭто самый простой ajax-запрос через jQuery с получением html-данных и их вставкой в dom-элемент с id="result" (содержимое элемента заменяется):
$("#result").load("");
Более продвинутый вариант использования load:
$("#result").load("", {par1:val1, par2:val2, ...}, function(response, status, xhr) { if (status == "success") { alert("Готово"); } else { alert("Ошибка: " + xhr.status + " " + xhr.statusText); } });
В этом примере серверу так же передаются параметры, а после получения ответа проверяется не было ли ошибки (например, ответ от сервера не был получен) и выполнение различных действий.
Ajax-запросы функциями GET и POSTЭти функции осуществляют отправку ajax запроса http-методами get и post. Приведу пару примеров их использования.
$.get("", // адрес отправки запроса {par1:val1, par2:val2, ...}, // передача с запросом каких-нибудь данных function(data) { // какие-то действия с полученными от сервера данными data });
Передача данных не обязательна, как и выполнение каких-либо действий после получения ответа от сервера, т.е. в этом случае, строчки 3 и 4-6 можно удалить при необходимости и таким образом еще сократить код.
Тип получаемых от сервера данных можно указать, добавив dataType (см.ниже) - по-умолчанию определяется автоматически.
Использование post аналогично, но в следующем примере использую вызов функции после получения ответа от сервера.
$.post("", {par1:val1, par2:val2, ...}, onSuccess); function onSuccess(data) { // какие-то действия с полученными от сервера данными data }
На самом деле, функции get и post являются сокращенными вариантами функции ajax, которую рассмотрю ниже.
Получение json-данных с помощью getJSONgetJSON - укороченный вариант ajax-запроса методом GET и получением данных в виде json. Способ удобен, например, для получения какого-то массива с данными и последующей работы с ним.
$.getJSON("", {par1:val1, par2:val2, ...}).success(function(data) { // что-то делаем с данными, например, обходим их в цикле и выводим: for (var i=0; i 10, "text" => "тестовая строка 1"); $arr = array("id" => 20, "text" => "тестовая строка 2"); $arr = array("id" => 30, "text" => "тестовая строка 3"); echo json_encode($arr);
Точно так же можно передать с сервера и объекты stdClass, преобразовав их в json-строку.
Простой ajax-запрос через jQuery с помощью функции AJAXТеперь приведу пример простого get запроса функцией ajax и получением html-данных.
$.ajax({ url: "", dataType: "html", success: function(data) { // какие-то действия с полученными данными data } });
Запрос к серверу происходит get-методом, т.к. параметр, отвечающий за тип запроса, type по-умолчанию равен GET.
Более сложный пример ajax-запроса через jQueryПример выполнения запроса функцией ajax с передачей данных post методом и обработкой событий. Ниже опишу дополнительные параметры, которые чаще всего применяются.
$.ajax({ url: "", type: "post", data: "", // можно строкой, а можно, например, так: $("input, input:checked, input:checked, select, textarea") dataType: "json", beforeSend: function() { $("#sendajax").button("loading"); }, complete: function() { $("#sendajax").button("reset"); }, success: function(json) { // какие-то действия с полученными данными }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } });
Кнопка отправки данных:
Отправить
В приведенном примере при нажатии на кнопку button, сначала меняется состояние кнопки (текст на ней меняется на "Отправка..." и она становится не активной), что делается при помощи параметра beforeSend. Затем происходит отправка запроса с передачей нужных данных. После того, как получен ответ от сервера состояние кнопки возвращается в прежнее (текст меняется на "Отправить", становится активной). Ответ получается в виде json-данных.
Коротко опишу параметры отправки ajax-запроса, которые чаще всего могут пригодиться:
url Адрес отправки ajax-запроса type Способ отправки запроса GET или POST data Отправляемые серверу данные. Может быть строка с параметрами и их значениями в формате par1=val1&par2=val2&..., объект jQuery, например, $("input") или другие данные. dataType Тип получаемых от сервера данных. Может быть html, json, text, script и xml. cache Кэширование браузером запроса (false - не кэшировать). async Асинхронное выполнение запроса, т.е. программа продолжает выполняться не дожидаясь ответа сервера. Если указать false, то запрос будет выполнен синхронно, при этом страница не будет ни на что реагировать, пока не будет получен ответ от сервера. processData Преобразование отправляемых данных в url-формат. Если нужно чтобы данные не преобразовывались, установить в false. Например, при отправке изображения на сервер или xml-данных. contentType Тип передаваемых данных, по умолчанию "application/x-www-form-urlencoded; charset=UTF-8". Если указать false, то в заголовке не будет передаваться тип, что может быть необходимо, например, при отправке изображения на сервер. beforeSend Функция, выполняемая перед отправкой ajax-запроса. complete Функция, выполняемая после получения ответа от сервера (любого, успешного или нет). success Функция, выполняемая при удачном выполнении запроса. error Функция, выполняемая в случае ошибки. Ниже приведу еще несколько примеров использования ajax-запросов.
Отправка формы со всеми данными ajax-запросом через jQueryПримерный код html-формы:
Ваше имя:
JavaScript код:
$("#myform").submit(function(e) { e.preventDefault(); $.ajax({ type: $(this).attr("method"), url: "", data: $(this).serialize(), async: false, dataType: "html", success: function(result){ alert("Форма отправлена"); } }); });
Для того чтобы страница не перезагружалась при нажатии на кнопку "submit", сначала отменяем стандартые действия браузера использовав e.preventDefaults() .
В параметре data мы передаем все поля формы использовав $(this).serialize() - эта функция преобразует все input-ы и select-ы в строку, пригодную для отправки на сервер.
Так же, здесь использован параметр async: false , чтобы пока форма не отправится на сервер больше ничего нельзя было нажать или сделать.
Отправка изображения или файла ajax-запросом через jQueryЗадача отправки файла или изображения на сервер без перезагрузки страницы довольно часто возникает. В этом примере разберу сразу 2 фишки: выбор файла по нажатию на кнопку , которая может быть оформлена как угодно, и отображение прогресса при передаче файла на сервер ajax-запросом.
html-код будет такой:
Загрузить изображение
#addfile { position: relative; overflow: hidden; width: 180px; height: 34px; } #load_file { position: absolute; top: 0; left: 0; width: 180px; height: 34px; font-size: 0px; opacity: 0; filter: alpha(opacity:0); } #load_file:hover { cursor: pointer; }
Суть идеи в том, что поверх кнопки выводится стандартный input для выбора файла, но он полностью прозрачен и имеет такие же размеры как кнопка. Таким образом, пользователь видит кнопку button, но когда наводит на нее курсор, фактически наводит на input. Соответственно, когда он нажимает на кнопку, на самом деле нажимается input выбора файла. Для того, чтобы не мигал курсор после выбора файла, размер шрифта задан 0px.
Теперь javascript код отправки файла на сервер с отображением прогресса:
$(function() { $("#load_file").on("change", loadfile); }); function loadfile() { $("#addfile span").html("Загружено 0 %"); files = $("#load_file").files; var form = new FormData(); form.append("upload", files); $.ajax({ url: "", type: "POST", data: form, cache: false, processData: false, contentType: false, xhr: function() { var myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { myXhr.upload.addEventListener("progress",ShowProgress, false); } return myXhr; }, complete: function(data){ $("#addfile span").html("Загрузить изображение"); $("#load_file").val(""); }, success: function(message){ alert(message); }, error: function(jqXHR, textStatus, errorThrown) { alert(textStatus+" "+errorThrown); } }); } function ShowProgress(e) { if(e.lengthComputable){ $("#addfile span").html("Загружено "+Math.round(100*e.loaded/e.total)+" %"); } }
При загрузке файла на сервер в кнопке будет показываться сколько % уже передано на сервер. После завершения загрузки название кнопки возвращается как было, а значение input-а с файлом устанавливается пустым, чтобы можно было снова выбирать новый файл.
Пример серверной части на php (по просьбе Евгения):
$message = ""; if (empty($_FILES["upload"]["name"]) || $_FILES["upload"] == "none") { $message = "Вы не выбрали файл"; } else if ($_FILES["upload"]["size"] == 0 || $_FILES["upload"]["size"] > 9437184) { $message = "Размер файла не соответствует нормам (максимум 9 Мб)"; } else if (($_FILES["upload"]["type"] != "image/jpeg") && ($_FILES["upload"]["type"] != "image/pjpeg") && ($_FILES["upload"]["type"] != "image/gif") && ($_FILES["upload"]["type"] != "image/png")) { $message = "Допускается загрузка только картинок JPG, GIF и PNG."; } else if (!is_uploaded_file($_FILES["upload"]["tmp_name"])) { $message = "Что-то пошло не так. Попытайтесь загрузить файл ещё раз."; } else { $ftype = $_FILES["upload"]["type"]; $fname = "newname_image.".($ftype == "image/gif" ? "gif" : ($ftype == "image/png" ? "png" : "jpg")); if (move_uploaded_file($_FILES["upload"]["tmp_name"], $_SERVER["DOCUMENT_ROOT"]."/files/".$fname)) { $message = "Изображение успешно загружено."; } else { $message = "Что-то пошло не так. Попытайтесь загрузить файл ещё раз."; } } exit($message);
Информация о загруженном изображении будет содержаться в $_FILES["upload"] , т.к. скриптом файл добавлялся так: form.append("upload", files); Соответственно, всё что требуется от php-программы - это проверить что файл соответствует ожидаемым параметрам, перенести файл в нужную папку (в примере в папку files) под нужным именем (в примере newname_image) и вернуть в браузер ответ, который в моем примере просто выводится пользователю командой alert(message);
Ситуаций, в которых можно и даже нужно использовать ajax-запросы, очень много и все их здесь не разобрать. Тем не менее, если есть предложения, какие еще примеры имеет смысл сюда добавить, пишите в комментариях.
- кликабельными. Для начала привяжемся к событию click для элемента “.pane-list li”; когда пользователь будет кликать по элементу списка, наша функция произведет поиск тэга и сделает редирект на страницу указанную в атрибуте href.