Вот Gist для небольшого плагина jQuery, который добавляет функцию loadThen к набору элементов jQuery.Это в основном load () без обратного вызова и возвращает обещание, которое разрешается только после того, как содержимое загружено и вставлено в набор выбранных элементов.
Это в основном копирование / вставка собственного кода load () jQueryза исключением того, что он возвращает обещание от фактического вызова ajax.Это позволяет получить отклоненное обещание в случае сбоя ajax.
Поскольку он основан на функциональности load (), вы можете добавить селектор после URL, разделенного пробелом, чтобы получить только фрагмент загруженного html.
Пример 1: Загрузить домашнюю страницу этого сайта в элемент с id = "container"
$('#container').loadThen('/').then(function () {
// loaded and ready.
}, function () {
// error
});
Пример 2: Загрузите заголовок домашней страницы в заголовок этой страницы
$('h1').eq(0).loadThen('/ h1').then(function () {
// loaded and ready.
}, function () {
// error
});
Содержание суть:
(function ($) {
var _loadThen = $.fn.loadThen;
$.fn.loadThen = function (url, params) {
if (typeof url !== "string" && _loadThen) {
return _loadThen.apply(this, arguments);
}
if(this.length <= 0) {
return jQuery.Deferred().resolveWith(this, ['']);
}
var selector, type, response,
self = this,
off = url.indexOf(" ");
if (off >= 0) {
selector = jQuery.trim(url.slice(off));
url = url.slice(0, off);
}
if (params && typeof params === "object") {
type = "POST";
}
return jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params
}).then(function (responseText) {
self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
return self;
});
};
}(jQuery));