これは、jQuery 要素のセットに loadThen 関数を追加する小さな jQuery プラグインの要点です。これは基本的にコールバックのない load() であり、コンテンツがロードされて選択された要素のセットに挿入された後にのみ解決される promise を返します。
これは基本的に、実際の ajax 呼び出しから promise を返すことを除いて、jQuery 独自の load() コードのコピー/貼り付けです。これにより、ajax が失敗した場合に拒否された promise を取得できます。
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));