Метод ajax()
Следующий метод, с которым я вас познакомлю будет «$.ajax()» – собственно, он тут главный, и все остальные AJAX-методы являются лишь обёрткой (и «.load()» в том же числе). Метод «$.ajax()» принимает в качестве параметра пачку настроек и URL цели. Приведу пример, аналогичный вызову «.load()»:
$.ajax({
url: "/get-my-page.html", // указываем URL
method: "GET", // HTTP метод, по умолчанию GET
data: {"id": 42}, // данные, которые отправляем на сервер
dataType: "html", // тип данных загружаемых с сервера
success: function (data) {
// вешаем свой обработчик события success
$("#content").html(data);
}
});
Тут мы обрабатывали HTML-ответ от сервера – это хорошо когда нам полстраницы обновить надо, но данные лучше передавать в «правильном» формате. XML – это понятно, структурировано, но избыточно и как-то не совсем JavaScript-way, и поэтому наш выбор – это JSON:
{
"note": {
"time": "2012.09.21 13:11:15",
"text": "Рассказать про JSONP"
}
}
Фактически, это и есть JavaScript-код как есть (JavaScript Object Notation, если быть придирчиво точным). При этом формат уже распространён настолько, что работа с данными в другом формате уже не приветствуется.
Жизнь не стоит на месте, есть и более удобные форматы, но не в JavaScript :)
Для загрузки JSON существует быстрая функция-синоним – «jQuery.getJSON()» – в качестве обязательного параметра лишь ссылка, куда стучимся, опционально можно указать данные для передачи на сервер и функцию обратного вызова.
Нельзя просто так взять и описать все возможные параметры для вызова «$.ajax()», таки стоит держать под рукой официальный мануал http://api.jquery.com/jQuery.ajax/.
Ещё есть пара-тройка функций, которые стоит упомянуть:
get(url, data, success, dataType)
— загружает данные методом GET
post(url, data, success, dataType)
— загружает данные методом POST
getScript(url, success)
— загружает JavaScript с сервера методом GET
Все они, как я уже говорил ранее, лишь обёртки над вызовом «$.ajax()», в чём несложно убедиться, заглянув в исходный код библиотеки. И там вы найдёте реализацию методов «$.get()» и «$.post()» :)
jQuery.each( [ "get", "post" ], function( i, method ) {
jQuery[ method ] = function( url, data, callback, type ) {
// Shift arguments if data argument was omitted
if ( isFunction( data ) ) {
type = type || callback;
callback = data;
data = undefined;
}
// The url can be an options object (which then must have .url)
return jQuery.ajax( jQuery.extend( {
url: url,
type: method,
dataType: type,
data: data,
success: callback
}, jQuery.isPlainObject( url ) && url ) );
};
} );
А функция
getScript()
в свою очередь это обёртка над$.get()
.